Как настроить docker-compose для инициализации базы данных MySQL в Windows 10?

Christian Eriksson спросил: 28 марта 2018 в 04:41 в: mysql

Я пытаюсь создать базу данных MySQL (в контейнере Docker с панелью инструментов докеров на хосте Windows 10), используя docker-compose с этой конфигурацией:

docker-compose.yml

version: '2'
services:
  db:
    container_name: test
    restart: unless-stopped
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: 'password'
      MYSQL_DATABASE: 'mydb'
    ports: 
      - 6612:3306
    volumes:
      - ./db:/var/lib/mysql

Я запускаю его в папке, содержащей только docker-compose.yml и получаю следующий вывод.

$ docker-compose upRecreating test ... done
Attaching to test
test  | Initializing database
test  | 2018-04-21T17:31:30.722810Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
test  | 2018-04-21T17:31:30.727269Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
test  | 2018-04-21T17:31:30.727618Z 0 [ERROR] Aborting
test  |
test  | Initializing database
test  | 2018-04-21T17:31:30.722810Z 0 [Warning] TIMESTAMP with implicit 
      .
      .
      .

Кажется, чтобы жаловаться на существующие файлы, но как может быть, когда папка пуста?

Во второй раз я запускаю тот же файл, в том же пустом (кроме docker-compose.yml), я получаю:

Starting test ... done
Attaching to test
test  | Initializing database
test  | 2018-04-21T17:36:12.716214Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
test  | 2018-04-21T17:36:12.726611Z 0 [Warning] Setting lower_case_table_names=2 because file system for /var/lib/mysql/ is case insensitive
test  | 2018-04-21T17:36:13.466867Z 0 [ERROR] InnoDB: Operating system error number 22 in a file operation.
test  | 2018-04-21T17:36:13.467174Z 0 [ERROR] InnoDB: Error number 22 means 'Invalid argument'
test  | 2018-04-21T17:36:13.467475Z 0 [ERROR] InnoDB: File ./ib_logfile101: 'aio write' returned OS error 122. Cannot continue operation
test  | 2018-04-21T17:36:13.467649Z 0 [ERROR] InnoDB: Cannot continue operation.
test exited with code 1

На этот раз он создает папку ./db в моем pwd с несколькими файлами:

  • ib_logfile1
  • ib_logfile101
  • ibdata1

Но ничего больше, и снова запустив его, мы вернемся к первому результату. Тот же docker-compose.yml работает без сбоев на Ubuntu 16.04. Может ли кто-нибудь сообщить мне, что может быть неправильным?

1 ответ

Есть решение
Christian Eriksson ответил: 28 марта 2018 в 04:41

Похоже, что ключ был в этой строке вывода:

[ERROR] InnoDB: File ./ib_logfile101: 'aio write' returned OS error 122.

Очевидно, что AIO не работает с моей настройкой. Я до сих пор не уверен, почему, но этот исправленный docker-compose.yml работает для меня:

version: '2'
services:
  db:
    container_name: test
    restart: unless-stopped
    image: mysql:5.7
    command: --innodb_use_native_aio=0
    environment:
      MYSQL_ROOT_PASSWORD: 'password'
      MYSQL_DATABASE: 'mydb'
    ports: 
      - 6612:3306
    volumes:
      - ./db:/var/lib/mysql

Обнаружил это благодаря ответу AndrewD