Ошибка при попытке запустить миграцию для mariadb через docker-compose - PullRequest
0 голосов
/ 16 января 2019

Я использую 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 голосов
/ 16 января 2019

Вы неправильно используете Dockerfile, путая изображения с контейнерами.

Команда RUN не будет выполнена, поскольку контейнер даже не существует в этой точке, поэтому подключать нечего, поэтому вам вообще не нужно настраивать Dockerfile.

Если migrate.sql нужно только один раз прочитать с чистой базой данных, тогда вы можете смонтировать файл в /docker-entrypoint-initdb.d/migrate.sql. Вы можете прочитать об этом каталоге в документации docker-mysql .

Если вам нужно импортировать его из уже существующей базы данных, просто запустите команду импорта с хоста или другого контейнера.

Я не рекомендую создавать образ mysql со встроенной базой данных, потому что любые изменения будут потеряны при перезапуске контейнера.

0 голосов
/ 16 января 2019

Если вам нужно подключиться к 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 в качестве имени хоста базы данных.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...