我尝试为EMQ MQTT服务器构建自定义映像。但是在docker copmose up期间,脚本update_config.sh不会被执行。
Dockerfile:
FROM emqttd-docker-v2.3.5
# change configuration file
ADD update_config.sh /opt/emqttd/etc/update_config.sh
ADD ./certs/MyEMQ1.key /opt/emqttd/etc/certs/MyEMQ1.key
ADD ./certs/MyEMQ1.pem /opt/emqttd/etc/certs/MyEMQ1.pem
ADD ./certs/MyRootCA.pem /opt/emqttd/etc/certs/MyRootCA.pem
WORKDIR /opt/emqttd/etc/
#update the emqtt config file
RUN /bin/ash -c /opt/emqttd/etc/update_config.sh
update_config.sh
#!/bin/ash
cd /opt/emqttd/etc
cp ./emq.conf ./emq.conf.bak
sed -i 's|.*listener.ssl.external.keyfile.*|listener.ssl.external.keyfile = etc/certs/MyEMQ1.key|g' ./emq.conf
sed -i 's|.*listener.ssl.external.certfile.*|listener.ssl.external.certfile = etc/certs/MyEMQ1.pem|g' ./emq.conf
sed -i 's|.*listener.ssl.external.cacertfile.*|listener.ssl.external.cacertfile = etc/certs/MyRootCA.pem|g' ./emq.conf
sed -i 's|.*listener.ssl.external.verify.*|listener.ssl.external.verify = verify_peer|g' ./emq.conf
我使用docker-compose来构建图像。 update_config.sh脚本将复制到映像但不会执行。
到目前为止我尝试了什么:
RUN /bin/ash -c /opt/emqttd/etc/update_config.sh
口味:
RUN /bin/ash -c /opt/emqttd/etc/update_config.sh
RUN /opt/emqttd/etc/update_config.sh
RUN ./update_config.sh
RUN chmod +x /opt/emqttd/etc/update_config.sh
之前添加RUN /bin/ash -c /opt/emqttd/etc/update_config.sh
,这会导致错误 chmod:/opt/emqttd/etc/update_config.sh:构建期间不允许操作 / LI>
任何人都可以帮助我吗?感谢。
答案 0 :(得分:2)
只需将ENTRYPOINT ["/bin/bash", "update_config.sh" ]
添加为最后一行即可。
还有update_config.sh
文件来启动您的应用程序并使您的容器处于无限循环状态。
示例update_config.sh:
#!/bin/ash
cd /opt/emqttd/etc
cp ./emq.conf ./emq.conf.bak
sed -i 's|.*listener.ssl.external.keyfile.*|listener.ssl.external.keyfile = etc/certs/MyEMQ1.key|g' ./emq.conf
sed -i 's|.*listener.ssl.external.certfile.*|listener.ssl.external.certfile = etc/certs/MyEMQ1.pem|g' ./emq.conf
sed -i 's|.*listener.ssl.external.cacertfile.*|listener.ssl.external.cacertfile = etc/certs/MyRootCA.pem|g' ./emq.conf
sed -i 's|.*listener.ssl.external.verify.*|listener.ssl.external.verify = verify_peer|g' ./emq.conf
sh start_your_app.sh
touch 1.txt;tail -f 1.txt #This will make your container in running infinite so that even after all the steps of this script has been executed your container will continue running. until you kill tail -f 1.txt command.
希望这会有所帮助。 谢谢!
答案 1 :(得分:-1)
灰 - 是最小的贝壳之一。该命令解释器有24个内置命令和10个不同的命令行选项。
ash并不是你需要的所有命令。您应该使用/bin/bash