首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Docker如何在启动时运行/usr/sbin/init和其他脚本

Docker如何在启动时运行/usr/sbin/init和其他脚本
EN

Stack Overflow用户
提问于 2018-02-10 19:06:03
回答 1查看 22.7K关注 0票数 11

Dockerfile

代码语言:javascript
运行
复制
FROM centos:7
COPY docker-entrypoint.sh /data/
ENTRYPOINT ["/data/docker-entrypoint.sh"]

docker-entrypoint.sh

代码语言:javascript
运行
复制
exec /usr/sbin/init && systemctl restart autofs %% python /data/myapp.py

我需要将/usr/sbin/init作为第一个命令运行,然后运行后续命令,如systemctl restart autofspython myapp.py

我似乎无法让docker-entrypoint.sh中的所有内容都正常工作,因为/usr/sbin/init没有返回

如果我将docker-entrypoint.sh更改为

代码语言:javascript
运行
复制
/usr/sbin/init &
systemctl restart autofs && python /data/myapp.py

它失败,并在d-bus中出现错误

当"docker run“被执行时,我该怎么做才能让容器按该顺序运行/usr/sbin/initsystemctl restart autofspython /data/myapp.py

在执行/usr/sbin/init之后,有没有其他方法来运行命令?我试过将systemctl作为CMD放入Dockerfile

代码语言:javascript
运行
复制
FROM centos:7
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl restart autofs"]

但是CMD永远不会被执行

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-02-10 20:07:06

声明

代码语言:javascript
运行
复制
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl"]

将导致:

代码语言:javascript
运行
复制
/usr/sbin/init systemctl

换句话说,ENTRYPOINT指令设置可执行文件,该文件用于执行COMMAND指令中给定的命令。

默认ENTRYPOINT/bin/sh -c,因此如果/data/docker-entrypoint.sh包含以下内容,则/bin/sh -c /data/docker-entrypoint.sh应该可以工作:

代码语言:javascript
运行
复制
/usr/sbin/init
systemctl restart autofs
python /data/myapp.py

这意味着:您不必更改ENTRYPOINT

如果将ENTRYPOINT更改为/data/docker-entrypoint.sh,则它应包含以下内容:

代码语言:javascript
运行
复制
/usr/sbin/init
systemctl restart autofs
python /data/myapp.py
# run the command given as arguments from CMD
exec "$@"

reference

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

https://stackoverflow.com/questions/48720049

复制
相关文章

相似问题

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