gpt4 book ai didi

bash - docker-compose yml 启动后运行脚本

转载 作者:IT老高 更新时间:2023-10-28 12:36:21 43 4
gpt4 key购买 nike

我想在运行后立即运行一个脚本

`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 -ddocker-compose up 时,它都会停止。 (容器不会继续运行)。虽然我的 shell 脚本很简单(运行 echos...或 phpunit)。这是我的脚本。

#!/bin/bash

echo running post install scripts for web..;
cd /srv/myweb
npm install
composer self-update
composer update

这是我得到的错误。就像服务器(nginx)还没有运行。此外,如果我使用 exec bash 连接到服务器,我会检查进程。我没有看到 nginx 正在运行(还)。

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 installcomposer *update(因此仅当/src/myweb 中的某些文件不存在),因为这会让你的容器启动时间白白增加。

请注意,这样做,NginX 将永远不会捕获 docker stop 发送的 SIGTERM 信号。这可能会导致它被突然杀死。

相反,如果你想确保 SIGTERM 被 nginx 接收,你必须将最后一行替换为 exec nginx。这会将 bash 进程替换为 nginx 本身。

关于bash - docker-compose yml 启动后运行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33009825/

43 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com