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(使用前将#替换为@)