【问题标题】:How can I run configuration commands after startup in Docker?在 Docker 中启动后如何运行配置命令?
【发布时间】:2017-10-17 14:37:07
【问题描述】:
我设置了一个 Dockerfile 来运行一项服务,该服务需要运行一些后续命令才能正确初始化。我创建了一个具有以下结构的启动脚本并将其设置为我的入口点:
- 为服务设置环境变量、生成证书等
- 以后台模式运行服务。
- 运行配置命令完成初始化服务。
显然,这不起作用,因为服务是在后台启动的,并且入口点脚本将以代码 0 退出。配置完成后如何保持此容器运行?是否可以在没有繁忙循环运行的情况下这样做?
【问题讨论】:
标签:
docker
docker-compose
hashicorp-vault
【解决方案1】:
如何在配置完成后保持该容器运行?是否可以在没有繁忙循环运行的情况下这样做?
在您的众多选择中:
- 使用
sleep inf 之类的东西,这不是一个繁忙的循环,也不会消耗 CPU 时间。
- 您可以使用
supervisord 之类的流程主管来启动您的服务并启动配置脚本。
- 您可以在服务容器启动后在单独的容器中运行配置命令。
【解决方案2】:
您可以查看此 GitHub 问题和具体评论 -
https://github.com/docker-library/wordpress/issues/205#issuecomment-278319730
总而言之,您可以这样做:
version: '2.1'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
image: wordpress:latest
volumes:
- "./wp-init.sh:/usr/local/bin/apache2-custom.sh"
depends_on:
db:
condition: service_started
ports:
- 80:80
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_PASSWORD: wordpress
command:
- apache2-custom.sh
wp-init.sh 是您编写要执行的代码的地方。
注意command yml 标签:
command:
- apache2-custom.sh
因为我们在volumes 标记中限制了两者,它实际上会在您的容器中运行wp-init.sh 中的代码。