docker-compose入门点脚本停止具有出口0的容器



执行我的入口点脚本后,容器停止了出口0。撰写的文件中指定的命令被忽略了。

我们将Docker与Docker-Compose一起作为我们的铁路应用程序的环境。

入口点脚本:

#! /bin/bash
bundle exec rails assets:clobber
bundle exec rails assets:precompile
bundle exec rake db:exists && bundle exec rake db:migrate || bundle exec rake db:setup
rm -rf /aps/tmp/pids/server.pid

撰写文件:

version: '2'
services:
  app:
    image: registry.gitlab.com/.../.../master:latest
    command: bundle exec rails server
    entrypoint: /aps/rails-entrypoint.sh
    volumes:
      - /srv/app/log/:/app/log
      - /srv/app/public/:/app/public
    env_file: .env
    ports:
      - '0.0.0.0:3333:3000'
    links:
      - apppostgres
  apppostgres:
    image: postgres
    ...

volumes:
  pgdata:

当我在输入点脚本运行时连接到容器时,我可以看到用ps aux作为/bin/bash /app/rails-entrypoint.sh bundle exec rails server的执行命令。

当我将命令块添加到entrypointscript中时,服务器的启动和运行,但这不是如何工作或?

我该怎么做才能使入口点脚本和命令块按照应有的运行?

启动容器时,则在您的情况下启动容器-entrypoint.sh的过程将被视为 pid 1死亡或出于任何原因停止,它将停止具有退出状态0或更高的容器,取决于主过程的实际退出状态。

您需要在入口点的末尾添加以下内容,以使其与bundle exec rails server

一起使用
exec "$@"

执行我的入门点脚本后,容器停止

这几乎是定义性的:当入口点完成容器退出时。

撰写文件中指定的命令被忽略了我们的Web服务器。

它以命令行参数传递给了入口点,这取决于您的脚本。

最常见的事情是执行未修改的命令行参数:

#!/bin/sh
# ... do pre-launch setup ...
exec "$@"

ENTRYPOINTCMD不会单独组合以使您在容器中运行两件事:唯一入口点是运行的,将命令作为参数和容器的寿命是入口点的寿命。)

最新更新