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?

当您启动一个容器时,它 运行 是您在 ENTRYPOINTCMD 中定义的命令。 这个命令通常会启动一个进程,只要这个进程在前台 运行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}

现在效果很好