Я хочу запустить mysql в Windows с помощью контейнера докеров, когда я пытаюсь использовать команду docker-compose up в файле docker-compose, это результат.
> D:\dockerfiles>docker-compose up
db_1 | Initializing database
db_1 | 2018-10-08T09:00:29.024081Z 0 [Warning] Changed limits: max_open_files: 1024 (requested 5000)
db_1 | 2018-10-08T09:00:29.024224Z 0 [Warning] Changed limits: table_open_cache: 431 (requested 2000)
db_1 | 2018-10-08T09:00:29.024512Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
db_1 | 2018-10-08T09:00:29.028590Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
db_1 | 2018-10-08T09:00:29.028673Z 0 [ERROR] Aborting
db_1 |
dockerfiles_db_1 exited with code 1
и это мой docker-compose.yml
version: '3.7'
services:
db:
image: mysql:5.7
restart: always
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: star
MYSQL_USER: user
MYSQL_PASSWORD: pass
обновление файла docker compose
version: '3.7'
services:
mysqldb:
image: mysql:5.7
container_name: mysql_con1
command: --default-authentication-plugin=mysql_native_password
command: --disable-partition-engine-check
restart: always
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: star
MYSQL_USER: user
MYSQL_PASSWORD: pass
volumes:
- "./:/var/lib/mysql"
networks:
- samplenet
networks:
samplenet:
driver: nat
См. github.com/docker-library/mysql/issues/290.
Доза решения GitHub не работает
Проблема с - "./:/var/lib/mysql" в том, что текущий каталог (./) не пуст. Он содержит файл docker-compose.
я меняю '"./:/var/lib/mysql"' на "./data" и та же ошибка






В каталоге /var/lib/mysql есть несколько файлов. Удалите все из этого каталога.
Или настоятельно рекомендуется использовать тома из docker-compose.yml.
volumes:
- /my/own/datadir:/var/lib/mysql
Обновлять: Я тестировал следующий файл набора, он работал нормально, без ошибок.
version: '3.7'
services:
db:
image: mysql:5.7
restart: always
volumes:
- ./data:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: pass
MYSQL_DATABASE: star
MYSQL_USER: user
MYSQL_PASSWORD: pass
извините за мою небольшую информацию, но что такое / my / own / datadir и / var / lib / mysql
/my/own/datadir - это путь, по которому вы хотите хранить файлы базы данных на вашем хост-компьютере, а /var/lib/mysql - это путь, по которому mysql хранит их в контейнере.
Но mysql Dockerfile добавляет точку монтирования VOLUME /var/lib/mysql по умолчанию, которая указывает контейнеру mysql хранить файлы базы данных в каталоге /var/lib/mysql на хост-машине.
обязательно удалите существующие отказавшие контейнеры. можно использовать docker-compose down.
Я делаю это, а также удаляю старые тома
Я только что заметил, что вы используете машину Windows. Кажется, что монтирование тома не работает, докер все еще использует путь монтирования по умолчанию. Проверить это github.com/docker/compose/issues/4303.
спасибо за ответы, но эта ошибка появляется ERROR: for test8_db_1 Cannot create container for service db: invalid volume specification: '/d/test8/data:/var/lib/mysql:rw' ERROR: for db Cannot create container for service db: invalid volume specification: '/d/test8/data:/var/lib/mysql:rw' ERROR: Encountered errors while bringing up the project.
См. Документацию по докеру, чтобы узнать, как указать тома в среде Windows.
У меня такое же поведение, определяющее restart = always, если я удалю его, все прошло нормально, а позже я запускаю команду
docker update --restart=always {{ID OF CONTAINER}}
Что заставляет его перезагружаться всегда. Надеюсь, это тебе поможет.
Обновить громкость в docker-compose.yml
volumes:
- /my/own/datadir:/var/lib/mysql
Обновление: этот файл компоновки, он работал нормально.
mysql:
image: mysql:5.7.22
container_name: mysql
restart: unless-stopped
tty: true
ports:
- "3307:3306"
volumes:
- /my/own/datadir:/var/lib/mysql
environment:
MYSQL_USERNAME: "root"
MYSQL_PASSWORD: "root"
MYSQL_ROOT_PASSWORD: "root"
MYSQL_DATABASE: test
Для тех, кто запускал контейнер с помощью команды docker run и добавил флаг --detach|-d; Удалите и перезапустите контейнер без флага -d.
Это должно предоставить сообщение об ошибке, объясняющее причину сбоя.
Добро пожаловать в SO. Пожалуйста, убедитесь, что кодовые блоки окружены
{и}для удобства чтения.