docker-compose mysql init sql не выполняется - PullRequest
0 голосов
/ 11 ноября 2018

Я пытаюсь настроить контейнер Docker MySQL и выполнить сценарий инициализации SQL. К сожалению сценарий sql не выполняется. Что я делаю не так?

version: '3.3'
services:
  api:
    container_name: 'api'
    build: './api'
  ports:
    - target: 8080
      published: 8888
      protocol: tcp
      mode: host
  volumes:
    - './api:/go/src/app'
  depends_on:
    - 'mysql'
 mysql:
  image: 'mysql:latest'
  container_name: 'mysql'
  volumes:
    - ./db_data:/var/lib/mysql:rw
    - ./database/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
  restart: always
  environment:
    MYSQL_USER: test
    MYSQL_PASSWORD: test
    MYSQL_ROOT_PASSWORD: test
    MYSQL_DATABASE: test
  ports:
    - '3306:3306'
volumes:
  db_data:

Я выполняю файл с docker-compose up -d --build

Ответы [ 2 ]

0 голосов
/ 12 ноября 2018

Многие контейнерные приложения, особенно с состоянием, имеют способ запуска init сценариев (например, сценарии sql здесь) и , они должны запускаться только один раз .

И так как они с состоянием, тома являются источником правды для контейнеров о том, запускать сценарии init или нет при перезапуске контейнера.

Как и в вашем случае, при удалении папки, используемой для монтирования связывания, или при использовании нового именованного тома, необходимо повторно запустить все имеющиеся сценарии init.

0 голосов
/ 11 ноября 2018

Папка docker-entrypoint-initdb.d будет запускаться только один раз, пока создается контейнер (создается его экземпляр), поэтому вам действительно нужно выполнить docker-compose down -v, чтобы повторно активировать его для следующего запуска.

Если вы хотите иметь возможность добавлять файлы sql в любой момент, вы можете посмотреть здесь специализированное изображение DoS MySql ... http://ivo2u.nl/o4

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