是否可以在入口点连接到外部容器并将DB转储上传到它?
我总是在此行执行 web_1退出代码0 : mysql -h $ MYSQL_HOST -u $ MYSQL_USER -p $ MYSQL_PASSWORD $ MYSQL_DATABASE<来自Dockerfile的install-sampledata中的magento-sample-data-1.9.1.0 / magento_sample_data_for_1.9.1.0.sql
但是,我可以 docker exec -it<> bash 创建容器后,在那里执行install-sampledata,它可以正常工作
我有这样的docker-compose
version: '2.1'
services:
db:
image: mysql:5.6.23
volumes:
- db-data:/var/lib/mysql/data
env_file:
- env
web:
build: .
ports:
- "8089:80"
links:
- db
env_file:
- env
tty: true
volumes:
db-data:
Dockerfile
FROM alexcheng/magento
ENTRYPOINT install-sampledata
和install-sampledata文件
#!/usr/bin/env bash
cd /tmp
cp /opt/magento-sample-data-1.9.1.0.tgz .
tar xvf magento-sample-data-1.9.1.0.tgz
cp -R magento-sample-data-1.9.1.0/media/* /var/www/htdocs/media/
cp -R magento-sample-data-1.9.1.0/skin/* /var/www/htdocs/skin/
chown -R www-data:www-data /var/www/htdocs/media
mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE < magento-sample-data-1.9.1.0/magento_sample_data_for_1.9.1.0.sql
答案 0 :(得分:0)
问题是:你的ENTRYPOINT
是install-sampledata
:一个脚本,它将运行一个mysql命令并且......退出!
此时容器将停止。
如果可能,最好调用该脚本,然后调用call mysql as in the mysql Dockerfile,以使前台进程保持运行。
或者您可以查看multi-stage build,以便使用已经烘焙过的必备文件构建图像。
答案 1 :(得分:0)
您在mysql容器中有一个入口点,允许您在启动时让容器使用您的mysql转储。在此处创建一个卷/docker-entrypoint-initdb.d,您的容器将填充您的数据库。
答案 2 :(得分:0)
添加
sh -c / bin / bash
最后是你的install-sampledata脚本。它将使用新的pid启动一个新的进程bash。所以你的容器不会死。