Ошибка при создании базы данных MySQL в файле Docker

Я хочу создать простой контейнер, содержащий сервер MySQL с инициализированной базой данных. Мой Dockerfile теперь выглядит следующим образом:

FROM ubuntu:16.10

RUN apt-get update

# install MySQL; root user with no password
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get install -y mysql-server mysql-client

RUN service mysql start
RUN mysqladmin -u root create mydb

CMD [ "bash" ]

Однако, когда я создаю изображение через docker build -t mysql-test. Я получаю следующую ошибку:

Step 7 : RUN mysqladmin -u root create mydb
 ---> Running in a35c3d176d4f
mysqladmin: connect to server at 'localhost' failed
error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (111)'
Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!
The command '/bin/sh -c mysqladmin -u root create mydb' returned a non-zero code: 1

Когда я комментирую строку, где я хочу создать базу данных (RUN mysqladmin -u root create mydb), я могу создать образ, запустить его и выполнить команду mysqladmin из командной строки:

# this works
> docker run -it mysql-test
root@...> service mysql start
root@...> mysqladmin -u root create mydb

Почему я получаю ошибку при создании базы данных в файле Docker? Спасибо!

0
11 янв. '17 в 21:38
источник поделиться
1 ответ

Чтение документации инструкции RUN дает понять:

Команда RUN будет выполнять любые команды в новом слое поверх текущего изображения и фиксировать результаты. Результирующее зафиксированное изображение будет использоваться для следующего шага в файле Docker.

Поэтому каждая команда запуска создает новое изображение и запускает сервер MySQL, и создание базы данных должно быть объединено в одну и ту же инструкцию RUN:

RUN service mysql start && mysqladmin -u root create mydb

Это решает.

+1
12 янв. '17 в 16:17
источник

Посмотрите другие вопросы по меткам или Задайте вопрос