首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Dockerfile运行shell-在docker构建期间没有运行脚本

Dockerfile运行shell-在docker构建期间没有运行脚本
EN

Stack Overflow用户
提问于 2018-03-12 08:09:39
回答 2查看 4.5K关注 0票数 1

我试图为EMQ服务器构建一个自定义映像。但是,脚本update_config.sh不是在对接器复制过程中执行的。

文档:

代码语言:javascript
复制
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

代码语言:javascript
复制
#!/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

我用“对接-合成”来建立图像。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:在构建过程中不允许的操作

有谁可以帮我?谢谢。

EN

回答 2

Stack Overflow用户

发布于 2018-03-12 08:46:40

只需将ENTRYPOINT ["/bin/bash", "update_config.sh" ]添加为最后一行即可。还可以使用update_config.sh文件启动应用程序,并使容器处于无限循环状态。

示例update_config.sh:

代码语言:javascript
复制
    #!/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.

希望这能帮上忙。谢谢!

票数 2
EN

Stack Overflow用户

发布于 2018-03-12 08:41:49

灰-是最小的贝壳之一。这个命令解释器有24个内置命令和10个不同的命令行选项。

艾什没有你需要的所有命令。你应该使用/bin/bash

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49230650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档