mysql - Dockerfile - 在入口点部署 mysql 转储

标签 mysql docker docker-compose

是否可以在入口点连接到外部容器并将数据库转储上传到它?

我总是在执行此行时 web_1 以代码 0 退出: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 install-sampledata from Dockerfile

但是,我可以在创建容器后执行 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:  

docker 文件

FROM alexcheng/magento

ENTRYPOINT 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

最佳答案

问题是:您的 ENTRYPOINTinstall-sampledata:一个将运行一个 mysql 命令并...退出的脚本!
此时容器将停止。

如果可能,最好调用那个脚本,然后call mysql as in the mysql Dockerfile , 以便让前台进程继续运行。

或者你可以看看multi-stage build ,以便使用已经内置的先决条件文件构建镜像。


关于mysql - Dockerfile - 在入口点部署 mysql 转储,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48492166/

相关文章:

sql - Left Join、Order by、MySQL优化

php - 从 2 个 MySQL 表中选择非重复记录

mysql - Vagrant + puppet + docker

ruby - 使用 Docker 镜像运行 bundle 安装会忽略 bundle 配置设置

docker-compose - 如果在 docker-compose 中重新创建另一个容器,如何自动重启容器?

mysql - 根据 'is in table/is not in table'排序查询输出

docker - Dockerfile 中的密码

c# - 环境变量更改时重新加载配置

php - Docker:使用php:fpm-alpine官方镜像时无法安装php intl扩展

mysql - 使用多个连接优化查询