Ich bin diese Woche auf das gleiche Problem gestoßen. Ich habe eine funktionierende Lösung ohne die Notwendigkeit von --volumes-from
gefunden
Das bereits erwähnte Problem ist, dass /var/lib/mysql
ein Volume ist, und da Docker UNVOLUME
nicht unterstützen wird in der nahen Zukunft in seinem Dockerfile können Sie diesen Speicherort nicht für Ihren Datenbankspeicher verwenden, wenn Sie standardmäßig mit einer leeren Datenbank beginnen möchten. (https://github.com/docker/docker/issues/18287
). Deshalb überschreibe ich etc/mysqld.my.cnf
, indem Sie mysql ein neues Datenverzeichnis geben.
Zusammen mit der Antwort von pwes können Sie ein Dockerile wie folgt erstellen:
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
Die einzige Änderung gibt es in my.cnf
ist der Speicherort des Datenverzeichnisses:
....
[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
....