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

时间:2016-07-06 15:55:03

标签: docker docker-compose dockerfile

如果我在控制台中执行此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传递则不行。 提前致谢

1 个答案:

答案 0 :(得分:22)

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

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

volumes:
    - ./logstash:/config_dir