用docker composer运行和configurationmqtt broker

在docker composer version 3的文档中,从我的理解,在容器启动后运行一些命令,我​​需要添加“command”标签,如下所示:

version: "3" services: broker: image: "toke/mosquitto" restart: always ports: - "1883:1883" - "9001:9001" command: ["cd /etc/mosquitto", "echo \"\" > mosquitto.pwd", "mosquitto_passwd -b /etc/mosquitto/mosquitto.pwd user pass", "echo \"password_file mosquitto.pwd\" >> mosquitto.conf", "echo \"allow_anonymous false\" >> mosquitto.conf"] 

日志返回/usr/bin/docker-entrypoint.sh: 5: exec: cd /etc/mosquitto: not found

解决方法可以在作曲文件中指定要运行的dockerfile,并添加应该在那里运行的命令,所以我创build了一个dockerfile:

 FROM toke/mosquitto WORKDIR . EXPOSE 1883:1883 9001:9001 ENTRYPOINT cd /etc/mosquitto ENTRYPOINT echo "" > mosquitto.pwd ENTRYPOINT mosquitto_passwd -b mosquitto.pwd usertest passwordtest ENTRYPOINT echo "password_file mosquitto.pwd" >> mosquitto.conf ENTRYPOINT echo "allow_anonymous false" >> mosquitto.conf 

容器保持重新启动,日志不返回任何东西。 我也尝试改变“入口”为“CMD”,没有改变输出。 作为指定docker composer文件使用特定dockerfile的加数,它无法parsing并说:

 ERROR: The Compose file '.\docker-compose.yml' is invalid because: Unsupported config option for services.broker: 'dockerfile' 

因为它不能parsing或不理解“dockerfile”标签。 有谁知道如何configurationdocker文件,甚至dockercomposer php运行在这篇文章中configuration一个mqtt经纪人的命令?

撰写文件中的command条目不是要运行的命令列表,而是一个命令,它是参数

例如运行mosquitto -c /etc/mosquitto/mosquitto.conf

 command: ["mosquitto", "-c", "/etc/mosquitto/mosquitto.conf"] 

至于Dockerfile,应该只有一个ENTRYPOINT或者CMD 。 如果你想运行多个命令,那么你应该创build一个shell脚本来运行它们,将它添加到容器中,然后使用ENTRYPOINT或者CMD来运行脚本。