Dockerfile - 在入口点部署 mysql 转储

Posted

技术标签:

【中文标题】Dockerfile - 在入口点部署 mysql 转储【英文标题】:Dockerfile - deploy mysql dump in entrypoint 【发布时间】:2018-07-07 14:40:54 【问题描述】:

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

我总是得到 web_1 exited with code 0 在这一行执行:mysql -h$MYSQL_HOST -u$MYSQL_USER -p$MYSQL_PASSWORD $MYSQL_DATABASE

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

并安装示例数据文件

#!/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

【问题讨论】:

【参考方案1】:

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

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

或者您可以查看multi-stage build,以便使用您的先决条件文件构建映像。


【讨论】:

为什么容器 web 会停止?据我所知,mysql 正在开发 db 容器。 Web 容器使用 mysql -h db .. 连接到它并上传转储。就这样。那么,为什么 web 容器会停止呢? @freento 容器生命周期背后的所有想法是,只要它的主进程运行,它就会运行。在你的情况下,你的主要过程是一个简单的命令。一旦该命令完成,它就会停止。【参考方案2】:

您在 mysql 容器中有一个入口点,允许您让容器在启动时使用您的 mysql 转储。在此处创建一个卷 /docker-entrypoint-initdb.d ,您的容器将填充您的数据库。

【讨论】:

【参考方案3】:

添加

sh -c /bin/bash

最后到您的 install-sampledata 脚本。它将使用新的 pid 启动一个新的进程 bash。所以你的容器不会死。

【讨论】:

以上是关于Dockerfile - 在入口点部署 mysql 转储的主要内容,如果未能解决你的问题,请参考以下文章

ENTRYPOINT/CMD process 入口点进程是什么?Docker容器Dockerfile entrypoint.sh文件作用,为什么在脚本开头要执行source ~/.bashrc?

ENTRYPOINT/CMD process 入口点进程是什么?Docker容器Dockerfile entrypoint.sh文件作用,为什么在脚本开头要执行source ~/.bashrc?

Docker 多个入口点

DockerFile部署lnmp+memcached+redis+mongodb开发环境for MySQL

Dockerfile快速部署mysql数据库并初始化

在发布时部署 UWP:错误 0xC0000139:未找到入口点