无法将数据库转储到mysql容器中

时间:2017-05-13 06:57:06

标签: mysql docker

我有以下yml文件:

version: '2'
services:
    # another container

    db:
        build: ./path/to/dockerfile/
        environment:
            MYSQL_ROOT_PASSWORD: mypassword
            MYSQL_DATABASE: database_name
            MYSQL_USER: username
            MYSQL_PASSWORD: mypassword
        volumes:
            - ./Dump.sql:/db/Dump.sql:z
            - ./Dump_Test.sql:/db/Dump_Test.sql:z
            - ./big_fc.sql:/db/big_fc.sql:z
        ports:
            - "3306:3306"

这是Docker文件:

FROM mysql:latest
LABEL maintainer "some@email.com"
RUN apt-get update -y
COPY ./solution.txt /temp/solution.txt
WORKDIR /temp
RUN cat solution.txt >> /etc/mysql/conf.d/mysql.cnf
RUN mysql -u username -pmypassword database_name -e "SOURCE /db/Dump.sql;"

但是,当我运行docker-compose up -d --build时,我收到以下错误:

  

ERROR 2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'连接到本地MySQL服务器(2)

我尝试了this,但这不起作用,我仍然遇到同样的错误。我不明白的是,如果我省略Dockerfile的最后一行,而是运行它:

docker-compose exec db mysql -u username -pmypassword database_name -e "SOURCE /db/Dump.sql;" 

它工作正常,但我想避免单独运行此行。

编辑:以下是我的Dockerfile

FROM mysql:latest
LABEL maintainer "some@email.com"
RUN apt-get update -y
COPY ./solution.txt /temp/solution.txt
WORKDIR /temp
RUN cat solution.txt >> /etc/mysql/conf.d/mysql.cnf

如果你想知道solution.txt的内容:

[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

1 个答案:

答案 0 :(得分:1)

Docker有两个阶段:

  1. 构建图片
  2. 从内置图片创建并运行容器
  3. 问题是您尝试在构建阶段还原数据库。让我们尝试将其移至第二阶段。要实现此目的,您可以在脚本中使用数据库初始化buit。

      

    初始化新实例   首次启动容器时,将创建具有指定名称的新数据库,并使用提供的配置变量进行初始化。此外,它将执行扩展名为.sh,.sql和.sql.gz的文件,这些文件位于/docker-entrypoint-initdb.d中。文件将按字母顺序执行。您可以通过将SQL转储装入该目录并使用提供的数据提供自定义映像来轻松填充您的mysql服务。默认情况下,SQL文件将导入到MYSQL_DATABASE变量指定的数据库中。

    您可以在mysql docker image official page

    上阅读更多内容