Saya sepertinya tidak bisa mendapatkan data MySQL untuk bertahan jika saya menjalankan $ docker-compose down
yang berikut ini.yml
version: '2'
services:
# other services
data:
container_name: flask_data
image: mysql:latest
volumes:
- /var/lib/mysql
command: "true"
mysql:
container_name: flask_mysql
restart: always
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this
MYSQL_USER: 'test'
MYSQL_PASS: 'pass'
volumes_from:
- data
ports:
- "3306:3306"
Pemahaman saya adalah bahwa dalam data
wadah saya menggunakan volumes: - /var/lib/mysql
peta ke direktori mesin lokal saya di mana mysql menyimpan data ke wadah dan karena pemetaan ini data harus bertahan bahkan jika kontainer dihancurkan. Dan mysql
wadah hanyalah antarmuka klien ke db dan dapat melihat direktori lokal karenavolumes_from: - data
Mencoba jawaban ini dan tidak berhasil. Docker-Compose Data Persistent Trouble
EDIT
Berubah saya .yml
seperti yang ditunjukkan di bawah ini dan menciptakan dir ./data
tapi sekarang ketika saya menjalankan docker-compose up --build
dengan mysql
wadah wont start melempar kesalahan mengatakan
data:
container_name: flask_data
image: mysql:latest
volumes:
- ./data:/var/lib/mysql
command: "true"
mysql:
container_name: flask_mysql
restart: always
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: 'test_pass' # TODO: Change this
MYSQL_USER: 'test'
MYSQL_PASS: 'pass'
volumes_from:
- data
ports:
- "3306:3306"
flask_mysql | mysqld: Can't create/write to file '/var/lib/mysql/is_writable' (Errcode: 13 - Permission denied)
flask_mysql | 2016-08-26T22:29:21.182144Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
flask_mysql | 2016-08-26T22:29:21.185392Z 0 [ERROR] --initialize specified but the data directory exists and is not writable. Aborting.
sumber
Jawaban:
Wadah data adalah solusi yang tidak perlu. Volume data akan melakukan trik untuk Anda. Ubah
docker-compose.yml
ke:Docker akan membuat volume untuk Anda di
/var/lib/docker/volumes
folder. Volume ini tetap ada selama Anda tidak mengetikdocker-compose down -v
sumber
mysql
gambar Docker. Anda bisa menggunakanmariadb
gambar Docker, yang berfungsi dengan sempurna dengan volume Docker.var/lib/docker/volumes
daripada memiliki direktori di folder proyek Andadata/mysql
?Ada 3 cara:
Cara pertama
Anda perlu menentukan direktori untuk menyimpan data mysql di mesin host Anda . Anda kemudian dapat menghapus wadah data. Data mysql Anda akan disimpan di sistem file lokal Anda.
Definisi wadah Mysql harus seperti ini:
Cara kedua
Akan melakukan wadah data sebelum mengetik
docker-compose down
:Cara ketiga
Anda juga dapat menggunakan
docker-compose stop
bukandocker-compose down
(maka Anda tidak perlu melakukan wadah)sumber
volumes: - /var/lib/mysql
karena memetakanHOST:CONTAINER
dan jika Anda tidak menentukan w / a colon itu memetakan dir yang sama?/var/lib/docker/volumes/ec3c543bc92f114c2c568733541e89381881e5a62996d7084e07793f86280535
volumes: - /var/lib/mysql
itu setara denganvolumes: - /var/lib/mysql:/var/lib/mysql
Anda harus membuat volume terpisah untuk data mysql.
Jadi akan terlihat seperti ini:
Dan tidak,
/var/lib/mysql
ada jalur di dalam wadah mysql Anda dan tidak ada hubungannya dengan jalur di mesin host Anda. Mesin host Anda bahkan mungkin tidak memiliki mysql sama sekali. Jadi tujuannya adalah untuk mempertahankan folder internal dari wadah mysql.sumber
volumes
data saya di bawah wadah data menjadi apa yang Anda masukkan ke bawahvolumes
dan hanyavolumes_from: - data
untuk Andamysql
? Juga mencoba ini dan menghasilkan kesalahan baru. Dikatakan ada dir tetapi tidak bisa ditulisi danmysql
wadah tidak akan berjalan.Sebenarnya ini adalah jalan dan Anda harus menyebutkan jalan yang valid agar ini berfungsi. Jika direktori data Anda berada di direktori saat ini maka alih-alih
my-data
Anda harus menyebutkan./my-data
, jika tidak maka akan memberikan Anda kesalahan itumysql
danmariadb
juga.sumber