尝试通过docker-compose为mariadb运行迁移时出错

时间:2019-01-16 15:15:04

标签: docker docker-compose dockerfile

我正在使用docker-compose在容器中设置Mariadb数据库并运行迁移以使其准备就绪。问题是这样做时出现以下错误:

Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2 "No such file or directory")

这使我认为Dockerfile中的数据库目前尚未建立,但我可能是错的。有什么想法吗?

Dockerfile内容:

FROM mariadb:10.0.37
ADD db /db
WORKDIR /db
RUN mysql --user userExample --password passwordExample < migrate.sql

docker-compose.yaml内容:

version: '3'
services:
  db:
    build: .
    environment:
      - MYSQL_USER=userExample
      - MYSQL_PASSWORD=passwordExample
    networks:
      example_network:
        ipv4_address: 172.28.1.1

networks:
  example_network:
    ipam:
      driver: default
      config:
        - subnet: 172.28.0.0/16

2 个答案:

答案 0 :(得分:1)

如果需要从主机连接到Db,最简单的操作就是以network=host模式启动此容器。因此,容器不会获得它自己的网络,而是会使用主机的网络。

首先更新您的docker-compose.yml

version: '3'
services:
  db:
    build: .
    environment:
      - MYSQL_USER=userExample
      - MYSQL_PASSWORD=passwordExample
    network_mode: "host"

第二次启动:docker-compose up

第三,使用localhost作为数据库主机名从主机进行连接。

答案 1 :(得分:1)

您以错误的方式使用了Dockerfile,从而使映像与容器混淆。

RUN命令将失败,因为此时容器甚至不存在,因此没有任何可连接的东西,因此您根本不需要设置Dockerfile。

如果migrate.sql仅需要使用干净的数据库读取一次,则可以将文件挂载在/docker-entrypoint-initdb.d/migrate.sql上。您可以在docker-mysql documentation上了解此目录。

如果需要从现有数据库中导入它,则只需从主机或另一个容器中运行import命令。

我不建议使用嵌入式数据库创建mysql映像,因为重新启动容器时所有更改都将丢失。