无法在一个MySQL容器中转储数据库

我有以下的XML文件:

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 ,我得到以下错误:

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

我试过这个 ,这不起作用,我仍然得到相同的错误。 我不明白的是,如果我省略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 

Docker有两个阶段:

  1. build立形象
  2. 从build立的图像创build和运行容器

问题是你试图在构build阶段恢复数据库。 让我们试着把它移到第二阶段。 为了达到这个目的,你可以在脚本中使用数据库初始化脚本。

初始化新实例首次启动容器时,将使用提供的configurationvariables创build并初始化具有指定名称的新数据库。 此外,它将执行在/docker-entrypoint-initdb.d中find的具有扩展名.sh,.sql和.sql.gz的文件。 文件将按字母顺序执行。 通过将SQL转储装载到该目录中并提供自定义图像和贡献数据,可以轻松地填充您的mysql服务。 SQL文件将被默认导入到由MYSQL_DATABASEvariables指定的数据库中。

你可以在mysql docker image官方页面上阅读更多内容