Docker如何在启动时运行/ usr / sbin / init以及其他脚本 [英] Docker How to run /usr/sbin/init and then other scripts on start up
问题描述
Dockerfile
Dockerfile
FROM centos:7
COPY docker-entrypoint.sh /data/
ENTRYPOINT ["/data/docker-entrypoint.sh"]
docker-entrypoint.sh
docker-entrypoint.sh
exec /usr/sbin/init && systemctl restart autofs %% python /data/myapp.py
我需要运行 / usr / sbin / init
作为第一个命令,然后运行后续命令,例如 systemctl restart autofs
和 python myapp。 py
I need to run /usr/sbin/init
as the first command then run subsequent commands such as systemctl restart autofs
and python myapp.py
我似乎无法在docker-entrypoint.sh内完成所有工作,因为 / usr / sbin / init
不返回
I cant seem to get all working inside docker-entrypoint.sh because /usr/sbin/init
does not return
如果我将docker-entrypoint.sh更改为
if i change docker-entrypoint.sh to
/usr/sbin/init &
systemctl restart autofs && python /data/myapp.py
由于d-bus错误而失败
it fails with error in d-bus
我该怎么办,所以容器运行 / usr / sbin / init
, systemctl重新启动autofs
和 python /data/myapp.py
在执行 docker run时按此顺序?
what can i do so the container runs /usr/sbin/init
, systemctl restart autofs
and python /data/myapp.py
in that order when "docker run" is executed?
在执行 / usr / sbin / init
之后,还有其他方法可以运行命令吗?
我尝试将systemctl作为CMD放置在Dockerfile中
Is there any other ways to run commands after /usr/sbin/init
is executed?
i've tried putting systemctl as CMD in Dockerfile
FROM centos:7
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl restart autofs"]
但是CMD永远不会执行
but CMD is never executed
推荐答案
声明
ENTRYPOINT ["/usr/sbin/init"]
CMD ["systemctl"]
将导致:
/usr/sbin/init systemctl
换句话说, ENTRYPOINT
指令设置可执行文件,该可执行文件用于执行从 COMMAND
指令。
In other words, the ENTRYPOINT
directive sets the executable which is used to execute the command given from the COMMAND
directive.
默认 ENTRYPOINT
为 / bin / sh -c
,因此 / bin / sh -c /data/docker-entrypoint.sh
应该可以工作,如果 /data/docker-entrypoint.sh
包含:
The default ENTRYPOINT
is /bin/sh -c
so /bin/sh -c /data/docker-entrypoint.sh
should work, if /data/docker-entrypoint.sh
contains:
/usr/sbin/init
systemctl restart autofs
python /data/myapp.py
意思s:您不必更改 ENTRYPOINT
如果更改 ENTRYPOINT
到 /data/docker-entrypoint.sh
,它应该包含以下内容:
If you change the the ENTRYPOINT
to /data/docker-entrypoint.sh
than it should contain something like:
/usr/sbin/init
systemctl restart autofs
python /data/myapp.py
# run the command given as arguments from CMD
exec "$@"
这篇关于Docker如何在启动时运行/ usr / sbin / init以及其他脚本的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!