我想在运行
后立即运行脚本`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
时,它都会停止。 (容器不能继续运行)。虽然我的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
那么为什么它会退出,尽管脚本语法正确?我怎样才能让它正确运行? (我在做什么,设置错误!)
答案 0 :(得分:29)
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 stop发送的SIGTERM信号。这可能会导致它被突然杀死。
相反,如果您想确保nginx收到SIGTERM,则必须将最后一行替换为exec nginx
。这用nginx本身取代了bash过程。