Docker 个容器待命并且 运行
Docker container staying up and running
我无法理解 docker 容器如何保持运行并 运行ning。据我所知,如果容器没有任何活动进程,它将自动关闭,而不受给定命令的影响。
这就是我指示 docker-compose.yml
执行此命令以使其保持活动状态的原因:
gateway:
build: .
image: me/gateway
container_name: gateway
command: tail -F /dev/null <------
# restart: always
ports:
- "10091:10091"
volumes:
- ./logs:/root/logs
- vendor:/root/vendor
- .:/root
env_file:
- .env
而我的 Dockerfile
执行以下操作:
FROM php:7-fpm-alpine
EXPOSE 10091
WORKDIR /root
COPY . .
COPY src/scripts/generateConfig.sh /usr/local/bin/generateConfig
RUN ["chmod", "+x", "/usr/local/bin/generateConfig"]
在这种情况下,容器保持运行状态,一切正常。但是我想在容器启动后 运行 一个脚本,所以我在 Dockerfile
:
的末尾添加了附加行
ENTRYPOINT ["generateConfig"]
命令运行后容器自动停止。当我检查日志时没有错误,因为脚本按预期完成了工作。脚本负责 运行 无限期地使用 Ratchet 网络套接字进程。
如何制作脚本 运行 并同时保留我的容器 运行ning?
当您启动一个容器时,它 运行 是您在 ENTRYPOINT
或 CMD
中定义的命令。
这个命令通常会启动一个进程,只要这个进程在前台 运行s,容器仍然会 运行。
如果您的进程在后台运行 运行,则容器将停止。
因此,如果您正在 运行 编写脚本,则需要确保它永不结束。
您可以通过在脚本末尾添加这样的行来简单地实现这一点:
tail -f <some log file> # keep listening on your application log file.
或者,您可以在 true 时添加一些:
while true; sleep 2; done
希望对您有所帮助
我找到问题了。命令启动 web 套接字进程的脚本以这一行开头:
nohup php ${serviceProcess} >> /dev/null 2>&1 &
解决方案是不通过仅使用来抑制输出:
nohup php ${serviceProcess}
现在效果很好
我无法理解 docker 容器如何保持运行并 运行ning。据我所知,如果容器没有任何活动进程,它将自动关闭,而不受给定命令的影响。
这就是我指示 docker-compose.yml
执行此命令以使其保持活动状态的原因:
gateway:
build: .
image: me/gateway
container_name: gateway
command: tail -F /dev/null <------
# restart: always
ports:
- "10091:10091"
volumes:
- ./logs:/root/logs
- vendor:/root/vendor
- .:/root
env_file:
- .env
而我的 Dockerfile
执行以下操作:
FROM php:7-fpm-alpine
EXPOSE 10091
WORKDIR /root
COPY . .
COPY src/scripts/generateConfig.sh /usr/local/bin/generateConfig
RUN ["chmod", "+x", "/usr/local/bin/generateConfig"]
在这种情况下,容器保持运行状态,一切正常。但是我想在容器启动后 运行 一个脚本,所以我在 Dockerfile
:
ENTRYPOINT ["generateConfig"]
命令运行后容器自动停止。当我检查日志时没有错误,因为脚本按预期完成了工作。脚本负责 运行 无限期地使用 Ratchet 网络套接字进程。
如何制作脚本 运行 并同时保留我的容器 运行ning?
当您启动一个容器时,它 运行 是您在 ENTRYPOINT
或 CMD
中定义的命令。
这个命令通常会启动一个进程,只要这个进程在前台 运行s,容器仍然会 运行。
如果您的进程在后台运行 运行,则容器将停止。
因此,如果您正在 运行 编写脚本,则需要确保它永不结束。
您可以通过在脚本末尾添加这样的行来简单地实现这一点:
tail -f <some log file> # keep listening on your application log file.
或者,您可以在 true 时添加一些:
while true; sleep 2; done
希望对您有所帮助
我找到问题了。命令启动 web 套接字进程的脚本以这一行开头:
nohup php ${serviceProcess} >> /dev/null 2>&1 &
解决方案是不通过仅使用来抑制输出:
nohup php ${serviceProcess}
现在效果很好