【问题标题】:Mount a volume in docker-compose. How is it done?在 docker-compose 中挂载一个卷。它是如何完成的?
【发布时间】:2026-02-14 04:30:01
【问题描述】:

如果我在控制台中执行这个 cmd:

 docker run -it --rm --link rabbit --link elasticsearch -v "$PWD"/logstash:/config-dir logstash logstash -f /config-dir/logstash.conf

运行良好。在 ./logstash 文件夹中有一个 logstash.conf。 但是现在我试图放入一个 docker-compose 并且同样不起作用:

  logstash:
  image: logstash:latest
  links:
    - "elasticsearch:elasticsearch"
    - "rabbit:rabbit"
  volumes:
      - $PWD/logstash:/config_dir
  command:
    - "-f /config_dir/logstash.conf"

但我看不出这两个命令之间的区别。一些帮助?体积安装是如何完成的?还是该命令不起作用? logstash init 的响应是:

logstash_1        | {:timestamp=>"2016-07-06T15:43:06.663000+0000", :message=>"No config files found: / /config_dir/logstash.conf\nCan you make sure this path is a logstash config file?", :level=>:error}
rabbitmq_logstash_1 exited with code 1

编辑:我终于通过删除命令并使用原始图像的默认命令解决了问题,但我仍然不明白问题以及如何将相同的命令传递给docker和有效,但如果它通过 docker-compose 传递,则不要。 提前致谢

【问题讨论】:

    标签: docker docker-compose dockerfile


    【解决方案1】:

    您的配置可能不起作用,因为您的 docker-compose 版本在创建容器时没有执行 shell 扩展。这意味着 docker compose 正在尝试查找文字路径 $PWD/logstash 而不是将 $PWD 扩展到您当前的目录。更高版本的 docker compose 确实允许环境变量扩展。

    Docker-compose does allow relative paths 不过,通过使用 ./,它引用了 compose 文件所在的文件夹,不一定是您的 pwd所以你只需要将你的撰写文件更改为:

    volumes:
        - ./logstash:/config_dir
    

    【讨论】:

    • 没办法 :( 同样的错误。我怀疑该命令,因为错误消息中添加了另一个斜杠“未找到配置文件:/ /config_dir/logstash.conf。第一个斜杠是做什么用的?
    • ./dir 是您在pwd 上引用目录的方式,如果您使用.dir,它将查找目录名称“.dir”
    • 愚蠢的问题,logstash 文件夹是否与您的 docker compose 文件位于同一目录中?
    • 你也可以只使用绝对路径,如果这样你就知道问题出在你的相对路径上
    • 更新 - Docker Compose 文件版本 2 和 3 实际上支持环境变量扩展。不过,相对路径语法仍然是定义卷位置的首选方式,因为它们是相对于 compose 的位置文件,而不是用户当前的工作目录。
    最近更新 更多