首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker-compose yml在启动后运行脚本

docker-compose yml在启动后运行脚本
EN

Stack Overflow用户
提问于 2015-10-08 15:54:41
回答 1查看 68.5K关注 0票数 41

我想在运行完脚本后立即运行脚本

代码语言:javascript
复制
`docker-compose up -d` 

这是我的docker-compose.yml代码片段。其他设置为mysql server、redis...etc....but,它们不会造成任何问题

代码语言:javascript
复制
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...or phpunit)。这是我的脚本。

代码语言:javascript
复制
#!/bin/bash

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

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

代码语言:javascript
复制
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

那么,尽管该脚本在语法上是正确的,但它为什么要退出呢?我怎样才能让它正确运行?(我在做什么,设置错误!)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-10-08 16:03:57

command将覆盖默认命令。

这就是容器停止的原因: nginx永远不会启动。

在脚本结束时,您必须运行nginx

代码语言:javascript
复制
#!/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信号。这可能会导致它突然被杀死。

相反,如果您希望确保nginx接收到SIGTERM,则必须将最后一行替换为exec nginx。这用nginx本身替换了bash进程。

票数 41
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33009825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档