Docker如何在启动时运行/ usr / sbin / init以及其他脚本 [英] Docker How to run /usr/sbin/init and then other scripts on start up

查看:4201
本文介绍了Docker如何在启动时运行/ usr / sbin / init以及其他脚本的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆