Tôi đang cố gắng tạo vùng chứa MySQL Docker được đặt trước với một lược đồ và dữ liệu hạt giống nhất định để tôi có thể có các vùng chứa khác kết nối với nó dưới dạng db. Tôi đang sử dụng trusted dockerfile/mysql image làm cơ sở, và tôi đã viết một Dockerfile để tạo một hình ảnh mới từ cơ sở đó và thêm schema.sql của tôi vào đó. Sau khi xây dựng hình ảnh đó (mysql: base), tôi đã cố gắng chạy bash trong thùng chứa mới, sau đó đi vào mysql và tạo cơ sở dữ liệu của tôi và sau đó nhập giản đồ. Sau đó, tôi thoát khỏi vùng chứa và cố gắng chuyển vùng chứa đó sang một hình ảnh Docker mới. Tuy nhiên, hình ảnh kết quả không tồn tại bất kỳ thay đổi nào tôi đã thực hiện đối với db của MySQL. Nó tồn tại các tệp khác mà tôi đã viết trong vùng chứa, chứ không phải db.Vùng chứa Docker MySQL không lưu dữ liệu vào hình ảnh mới
Đây là Dockerfile tôi sử dụng để xây dựng hình ảnh ban đầu (myorg/mysql: base).
FROM dockerfile/mysql:latest
MAINTAINER (me)
ADD schema.sql /data/schema.sql
EXPOSE 3306
# Define working directory.
WORKDIR /data
CMD ["mysqld_safe"]
Sau khi xây dựng đó, tôi đi vào hình ảnh:
docker run -i -t myorg/mysql:base bash
Và chạy MySQL nhập các lược đồ:
myslqd_safe &
141218 00:15:56 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
mysql -u root
mysql> CREATE DATABASE mydb;
exit;
mysql -u root -D mydb < schema.sql
tôi có thể đi vào mysql và xác minh các lược đồ đã được đã nhập thành công:
mysql -u root -D mydb -e "SELECT * from tokens;"
Ngoài ra, nếu tôi đi vào /var/lib/mysql
Tôi có thể thấy rằng có một thư mục mydb
có chứa các tệp .frm tương ứng với db.
Nhưng khi tôi thoát ra và cố gắng cam kết container đến một hình ảnh mới:
docker commit -m="import schema.sql" -a="Me" 72c2ff39dd65 myorg/mysql:seed
Và sau đó đi vào hình ảnh mới:
docker run -i -t --rm myorg/mysql:seed bash
Các file db không còn trong/var/lib/mysql và chạy mysql -u root -e "SHOW DATABASES"
không hiển thị cơ sở dữ liệu mydb
, chỉ mặc định mysql
, information_schema
và performance_schema
dbs. Tôi thấy rằng nếu tôi đã tạo một tệp văn bản mới trong vùng chứa (echo 'test' > newfile
), tệp đó sẽ có mặt trong hình ảnh đã cam kết, chứ không phải tệp db.
Tôi tự hỏi liệu điều này có liên quan gì đến thực tế là hình ảnh đáng tin cậy Dockerfile có VOLUME ["/etc/mysql", "/var/lib/mysql"]
để nó gắn kết thư mục db dưới dạng ổ đĩa. Dockerfile của tôi không có lệnh này, nhưng tôi không biết nếu nó được thừa hưởng anyway (Tôi không thực sự hiểu làm thế nào khối lượng hoạt động tốt, đủ để biết làm thế nào điều này có thể ảnh hưởng đến xây dựng của tôi). Tôi không cần db gắn kết như một khối lượng vì tôi cần một container để kết nối với nó qua một kết nối mạng (tôi sẽ sử dụng liên kết docker cho rằng).
FWIW, tôi đang chạy boot2docker 1.3.2 trên OS X 10.9.5.
Thùng chứa MYSQL chính thức FYI ở đây https://registry.hub.docker.com/_/mysql/ không phải là tài khoản bạn đã liên kết –