如何将带有--config选项的docker运行应用于docker compose



我有以下docker命令:

sudo docker run --env-file env.list 
-p 80:8080 
-v $PWD/snowplow/config:/snowplow/config  
snowplow/scala-stream-collector-kinesis:1.0.0  
--config /snowplow/config/config.hocon

我正试图将其移动到docker-compose.yml文件中,但我在--config选项方面遇到了问题。我的文件看起来是这样的,有人能看到我哪里出错了吗:

version: '3.3'
services:
collector:
image: snowplow/scala-stream-collector-kinesis:1.0.0
environment:
- AWS_CBOR_DISABLE=1
ports:
- "80:8080"
volumes:                                                                                                  
- ./data/snowplow:/snowplow
configs:
- source: collectorcnf                                                                                    
target: /snowplow/config/config.hocon          
configs:
collectorcnf:
file: ./data/snowplow/config/config.hocon

我已经相应地移动了配置文件以匹配。我在sudo docker-compose up上收到的错误消息是:

collector_1  | Error: Missing option --config
collector_1  | Try --help for more information.
collector_1  | configuration has no "collector" path

图像名称后出现的所有内容都将覆盖图像默认命令。所以你想要:

version: '3.3'
services:
collector:
image: snowplow/scala-stream-collector-kinesis:1.0.0
# the below "command" is the portion after the image name in the run command:
command: ["--config", "/snowplow/config/config.hocon"]
environment:
- AWS_CBOR_DISABLE=1
ports:
- "80:8080"
volumes:
- ./data/snowplow:/snowplow

当图像定义了入口点时,命令会附加在入口点之后,成为命令的参数。使用json格式非常重要,可以避免这种格式被封装在/bin/sh -c "..."语法中。

显然,带有docker命令的--configdocker-compose中的configs指向两个独立的东西。

compose文件中的configs选项用于设置服务配置的docker config。点击此处查看更多详细信息。这在docker swarm和运行docker服务时都能很好地发挥作用。

另一方面,--config选项专门用于docker客户端配置,即.docker目录下的文件。更多详细信息请点击此处。

注意:我明白为什么这个命名非常令人困惑。当您使用configs运行docker-compose up时会发出警告,提示configs-摘录如下(基于您的collector标签(:

WARNING: Some services (collector) use the 'configs' key, which will be ignored. Compose does not support 'configs' configuration - use `docker stack deploy` to deploy to a swarm.

最新更新