Tento týden jsem narazil na stejný problém. Našel jsem funkční řešení bez potřeby --volumes-from
Problém, který již byl zmíněn, je, že /var/lib/mysql
je svazek a protože Docker nebude podporovat UNVOLUME
v blízké budoucnosti v Dockerfile nemůžete toto umístění použít pro úložiště databáze, pokud chcete začít s prázdnou databází ve výchozím nastavení. (https://github.com/docker/docker/issues/18287
). Proto přepisuji etc/mysqld.my.cnf
, což dává mysql nový datový adresář.
Společně s pwesovou odpovědí můžete vytvořit Dockerile takto:
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
Jediná změna je v my.cnf
je umístění datadir:
....
[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
....