在docker compose中装入卷。怎么做的?

在docker compose中装入卷。怎么做的?,docker,docker-compose,dockerfile,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: logst

如果我在控制台中执行此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 compose版本在创建容器时不执行shell扩展。这意味着docker compose正在尝试查找文本路径
$PWD/logstash
,而不是将
$PWD
扩展到当前目录。docker compose的更高版本允许环境变量扩展

Docker compose,通过使用
/
,引用撰写文件所在的文件夹,而不一定是您的
pwd
,因此您只需将撰写文件更改为:

volumes:
    - ./logstash:/config_dir

不可能:(同样的错误。我怀疑是这个命令,因为错误消息放了另一个斜杠“找不到配置文件://config\u dir/logstash.conf。第一个斜杠是什么意思?
/dir
是你在
pwd
上引用目录的方式,如果你这样做了
.dir
它会查找目录名“.dir"愚蠢的问题,但是logstash文件夹是否与docker compose文件位于同一目录中?您也可以使用绝对路径,如果这样做有效,那么您就知道问题在于您的相对路径更新-docker compose文件版本2和3实际上支持环境变量扩展。不过,相对路径语法仍然是p可引用的定义卷位置的方法,因为卷位置相对于撰写文件的位置,而不是用户的当前工作目录。