Berdasarkan penelitian @dekin, saya melakukan ini untuk menyelesaikan masalah:
Dockerfile:
FROM mysql:latest
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
CMD ["--datadir", "/var/lib/mysql-no-volume"]
Bangun &jalankan:
docker build . -t my-mysql
docker run -e MYSQL_ROOT_PASSWORD=root -it my-mysql
Berdasarkan jawaban @Robert, saya mendapatkan Dockerfile
ini :
FROM mysql:5.6.22
RUN cp -r /var/lib/mysql /var/lib/mysql-no-volume
RUN sed -i -e "s|/var/lib/mysql|/var/lib/mysql-no-volume|" /etc/mysql/my.cnf
CMD
override tidak bekerja untuk saya, penampung berhenti dengan kesalahan aneh:
2019-02-21 15:18:50 1 [Note] Plugin 'FEDERATED' is disabled.
mysqld: Table 'mysql.plugin' doesn't exist
2019-02-21 15:18:50 1 [ERROR] Can't open the mysql.plugin table. Please run mysql_upgrade to create it.
Saya kira CMD
yang asli perintah sedang melakukan lebih banyak hal yang sekarang hilang (dalam jawaban @Robert) jadi saya melakukannya dengan pendekatan yang berbeda. Saya tidak mencobanya dengan latest
versi tapi saya pikir itu harus bekerja.
Jika Anda menggunakan docker-compose
, tidak perlu membuat gambar kustom. Cukup tambahkan bendera --datadir=/var/lib/mysql-no-volume
ke perintah Anda saat menarik mysql
gambar.
Contoh:
version: '2.4'
services:
mysql:
image: mysql:5.7
command: "mysqld --character-set-server=utf8 --collation-server=utf8_general_ci --datadir=/var/lib/mysql-no-volume"
Gambar mysql resmi menyimpan data dalam volume. Biasanya hal ini diinginkan agar data Anda dapat bertahan melebihi masa pakai penampung Anda, tetapi volume data mengabaikan Sistem File Union dan tidak berkomitmen pada image.
Anda dapat mencapai apa yang Anda coba lakukan dengan membuat gambar dasar mysql Anda sendiri tanpa volume. Anda kemudian dapat menambahkan data dan memasukkannya ke gambar, tetapi data apa pun yang ditambahkan ke penampung yang sedang berjalan setelah komit akan hilang saat penampung hilang.