W tym tygodniu natknąłem się na ten sam problem. Znalazłem działające rozwiązanie bez potrzeby --volumes-from
Problem, który już wspomniano, polega na tym, że /var/lib/mysql
jest woluminem, a ponieważ Docker nie będzie obsługiwał UNVOLUME
w niedalekiej przyszłości jest to plik Dockerfile, nie możesz użyć tej lokalizacji do przechowywania bazy danych, jeśli chcesz domyślnie zacząć od pustej bazy danych. (https://github.com/docker/docker/issues/18287
). Dlatego nadpisuję etc/mysqld.my.cnf
, dając mysql nowy katalog danych.
Wraz z odpowiedzią pwesa, możesz utworzyć Dockerile w ten sposób:
FROM mysql:5.6
ENV MYSQL_DATABASE db
ENV MYSQL_ROOT_PASSWORD pass
COPY db.sql /docker-entrypoint-initdb.d/db.sql
COPY my.cnf /etc/mysql/my.cnf
RUN /entrypoint.sh mysqld & sleep 30 && killall mysqld
RUN rm /docker-entrypoint-initdb.d/db.sql
Jedyna zmiana jest w my.cnf
to lokalizacja katalogu danych:
....
[mysqld]
skip-host-cache
skip-name-resolve
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql2 <-- can be anything except /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
explicit_defaults_for_timestamp
....