gpt4 book ai didi

docker - 在Docker构建期间未运行Dockerfile RUN Shell脚本

转载 作者:行者123 更新时间:2023-12-02 19:06:54 24 4
gpt4 key购买 nike

我尝试为EMQ MQTT服务器构建自定义镜像。但是在docker copmose期间,脚本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脚本复制到镜像,但不执行。

到目前为止我尝试过的是:
  • 使用COPY代替ADD复制文件
  • 在以下尝试了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:在构建
  • 期间不允许操作

    谁能帮我?谢谢。

    最佳答案

    只需将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.

    希望这会有所帮助。
    谢谢!

    关于docker - 在Docker构建期间未运行Dockerfile RUN Shell脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49230650/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com