Docker 如何在启动时运行 /usr/sbin/init 以及其他脚本 [关闭]

2024-02-07

Dockerfile

FROM centos:7
COPY docker-entrypoint.sh /data/
ENTRYPOINT ["/data/docker-entrypoint.sh"]

docker-entrypoint.sh

exec /usr/sbin/init && systemctl restart autofs %% python /data/myapp.py

我需要跑/usr/sbin/init作为第一个命令,然后运行后续命令,例如systemctl restart autofs and python myapp.py

我似乎无法在 docker-entrypoint.sh 内完成所有工作,因为/usr/sbin/init不返回

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

/usr/sbin/init &
systemctl restart autofs && python /data/myapp.py

它因 d-bus 错误而失败

我该怎么做才能让容器运行/usr/sbin/init, systemctl restart autofs and python /data/myapp.py执行“docker run”时的顺序?

之后还有其他方法运行命令吗/usr/sbin/init被处决了吗? 我尝试将 systemctl 作为 CMD 放入 Dockerfile

FROM centos:7
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl restart autofs"]

但 CMD 从未被执行


声明

ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl"]

将导致:

/usr/sbin/init systemctl

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

默认ENTRYPOINT is /bin/sh -c so /bin/sh -c /data/docker-entrypoint.sh应该有效,如果/data/docker-entrypoint.sh包含:

/usr/sbin/init
systemctl restart autofs
python /data/myapp.py

这意味着:您不必更改ENTRYPOINT

如果您更改ENTRYPOINT to /data/docker-entrypoint.sh比它应该包含类似的内容:

/usr/sbin/init
systemctl restart autofs
python /data/myapp.py
# run the command given as arguments from CMD
exec "$@"

参考 https://stackoverflow.com/questions/39082768/what-does-set-e-and-exec-do-for-docker-entrypoint-scripts

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker 如何在启动时运行 /usr/sbin/init 以及其他脚本 [关闭] 的相关文章

随机推荐