我有下面的安装docker composer安装程序,并希望运行shell脚本来自动执行任务,例如将db导入mysql数据库。
# Adopt version 2 syntax:
version: '2'
volumes:
database_data:
driver: local
services:
###########################
# Setup the Nginx container
###########################
nginx:
image: nginx:latest
ports:
- 8080:80
volumes:
- ./docker/nginx/default.conf:/etc/nginx/conf.d/default.conf
volumes_from:
- php
###########################
# Setup the PHP container
###########################
php:
build: ./docker/php/
expose:
- 9000
volumes:
- .:/var/www
###########################
# Setup the Database (MySQL) container
###########################
mysql:
image: mysql:latest
expose:
- 3306
volumes:
- database_data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: secret
MYSQL_DATABASE: project
MYSQL_USER: project
MYSQL_PASSWORD: project
2条答案
按热度按时间oyxsuwqo1#
最好的解决方案是创建一个自定义dockerfile,它扩展了
mysql
并添加一个定制的shell脚本,它可以满足您的需要。例如:开始.sh
别忘了加上你的名字
backup.sql
要么到你的文件里要么docker-compose.yml
现在,dockerfile:如果你改变主意
backup.sql
通常,将其添加到dockerfile是没有意义的。相反,把它放在下面volumes
在docker-compose.yml
:ig9co6j12#
您可以继续使用原始映像:将安装脚本作为配置加载到容器中(使用长格式定义以便可以设置执行权限),然后重写入口点以运行脚本(一旦完成,可能会运行原始入口点脚本)。比如:
其他的答案是正确的,正确的方法是塑造自己的形象。但是tbh如果覆盖脚本相对较小且较轻,那么解决方法也不是很糟糕,而且它使您不必在每次mysql发布新映像时重建自定义映像。