Dockerfile - 在入口点

时间:2018-01-28 22:44:10

标签: mysql docker docker-compose

是否可以在入口点连接到外部容器并将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

3 个答案:

答案 0 :(得分:0)

问题是:你的ENTRYPOINTinstall-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。所以你的容器不会死。