docker-compose yml 运行 up 后的脚本
docker-compose yml running a script after up
我想运行一个脚本,紧接着运行宁
`docker-compose up -d`
这是我的 docker-compose.yml
片段。其他设置是 mysql 服务器、redis...等....但它们不会造成任何问题
web:
image: nginx
container_name: web-project
volumes:
- ./code:/srv
working_dir: /srv/myweb
extra_hosts:
- "myweb.local:127.0.0.1"
ports:
- 8081:80
# tty: true
command: sh /srv/scripts/post-run-web.sh
所以每当我 运行 docker-compose up -d
或 docker-compose up
一切都停止了。 (容器不保留 运行ning)。尽管我的 shell 脚本很简单(运行ning echos...或 phpunit)。这是我的脚本。
#!/bin/bash
echo running post install scripts for web..;
cd /srv/myweb
npm install
composer self-update
composer update
这是我得到的错误。就像服务器 (nginx) 还没有 运行ning 一样。另外,如果我使用 exec bash 连接到服务器,我会检查进程。我没有看到 nginx 运行ning(还)。
web_1 | You are already using composer version 7a9eb02190d334513e99a479510f87eed18cf958.
web_1 | Loading composer repositories with package information
web_1 | Updating dependencies (including require-dev)
web_1 | Generating autoload files
web-project exited with code 0
Gracefully stopping... (press Ctrl+C again to force)
Stopping mysql-project... done
Stopping rabbitmq-project... done
Stopping redis-project... done
那么为什么它会退出,尽管脚本在语法方面是正确的?我怎样才能正确地运行? (我在做什么,设置错了!)
command 覆盖默认命令。
这就是您的容器停止的原因:nginx 永远不会启动。
在你的脚本结束时你必须 运行 nginx
#!/bin/bash
echo running post install scripts for web..;
cd /srv/myweb
npm install
composer self-update
composer update
nginx
顺便说一句,我建议您仅在需要时才更改您的脚本和 运行 npm install
和 composer *update
(因此只有 /src/myweb 中的某些文件没有存在),因为它让你的容器启动时间白白增加。
请注意,这样做,NginX 将永远不会捕获 docker 停止发送的 SIGTERM 信号。这可能会导致它突然被杀死。
相反,如果您想确保 nginx 收到 SIGTERM,则必须将最后一行替换为 exec nginx
。这用 nginx 本身替换了 bash 进程。
我想运行一个脚本,紧接着运行宁
`docker-compose up -d`
这是我的 docker-compose.yml
片段。其他设置是 mysql 服务器、redis...等....但它们不会造成任何问题
web:
image: nginx
container_name: web-project
volumes:
- ./code:/srv
working_dir: /srv/myweb
extra_hosts:
- "myweb.local:127.0.0.1"
ports:
- 8081:80
# tty: true
command: sh /srv/scripts/post-run-web.sh
所以每当我 运行 docker-compose up -d
或 docker-compose up
一切都停止了。 (容器不保留 运行ning)。尽管我的 shell 脚本很简单(运行ning echos...或 phpunit)。这是我的脚本。
#!/bin/bash
echo running post install scripts for web..;
cd /srv/myweb
npm install
composer self-update
composer update
这是我得到的错误。就像服务器 (nginx) 还没有 运行ning 一样。另外,如果我使用 exec bash 连接到服务器,我会检查进程。我没有看到 nginx 运行ning(还)。
web_1 | You are already using composer version 7a9eb02190d334513e99a479510f87eed18cf958.
web_1 | Loading composer repositories with package information
web_1 | Updating dependencies (including require-dev)
web_1 | Generating autoload files
web-project exited with code 0
Gracefully stopping... (press Ctrl+C again to force)
Stopping mysql-project... done
Stopping rabbitmq-project... done
Stopping redis-project... done
那么为什么它会退出,尽管脚本在语法方面是正确的?我怎样才能正确地运行? (我在做什么,设置错了!)
command 覆盖默认命令。
这就是您的容器停止的原因:nginx 永远不会启动。
在你的脚本结束时你必须 运行 nginx
#!/bin/bash
echo running post install scripts for web..;
cd /srv/myweb
npm install
composer self-update
composer update
nginx
顺便说一句,我建议您仅在需要时才更改您的脚本和 运行 npm install
和 composer *update
(因此只有 /src/myweb 中的某些文件没有存在),因为它让你的容器启动时间白白增加。
请注意,这样做,NginX 将永远不会捕获 docker 停止发送的 SIGTERM 信号。这可能会导致它突然被杀死。
相反,如果您想确保 nginx 收到 SIGTERM,则必须将最后一行替换为 exec nginx
。这用 nginx 本身替换了 bash 进程。