在docker-compose中安装卷.怎么做?

Kil*_*zor 16 docker dockerfile docker-compose

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

 docker run -it --rm --link rabbit --link elasticsearch -v "$PWD"/logstash:/config-dir logstash logstash -f /config-dir/logstash.conf
Run Code Online (Sandbox Code Playgroud)

它运行正常.在./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"
Run Code Online (Sandbox Code Playgroud)

但我看不出两个命令之间的区别.一些帮助?如何完成卷装?或者命令不起作用?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
Run Code Online (Sandbox Code Playgroud)

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

Wil*_*ell 27

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

Docker-compose 确实允许相对路径,通过使用./,引用compose文件所在pwd文件夹,不一定是你的,所以你只需要将你的compose文件更改为:

volumes:
    - ./logstash:/config_dir
Run Code Online (Sandbox Code Playgroud)

  • 更新 - Docker Compose 文件版本 2 和 3 中实际上支持环境变量扩展。 尽管如此,相对路径语法仍然是定义卷位置的首选方式,因为它们相对于撰写文件的位置,而不是用户当前的工作目录。 (2认同)