Điểm:0

Tại sao vùng chứa của tôi không chứa dữ liệu DB sau khi tôi cam kết?

lá cờ fr

Tôi đang cố tạo vùng chứa PostgreSQL đã chứa dữ liệu phát triển. Tôi có thể xem dữ liệu mình đã tạo, nhưng khi tôi làm, đẩy, và kéo hình ảnh, dữ liệu không có ở đó.

Dưới đây là Dockerfile của tôi:

TỪ postgis/postgis:11-2.5
BẢO TRÌ Tôi

# Nội dung của 20-init_db.sql:
# TẠO PHẦN MỞ RỘNG NẾU KHÔNG TỒN TẠI btree_gist;
# TẠO PHẦN MỞ RỘNG NẾU KHÔNG TỒN TẠI hstore;
SAO CHÉP ./20-init_db.sql /docker-entrypoint-initdb.d/20-init_db.sql
SAO CHÉP ./make_data.sh /make_data.sh

Tôi tạo vùng chứa bằng tập lệnh bên dưới và dữ liệu được điền thành công.

#!/bin/bash

aws ecr get-login-password --region us-east-1 | \
    đăng nhập docker --username AWS --password-stdin 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com

aws ecr tạo-kho lưu trữ --repository-name dev_postgres --region us-east-1

# Đảm bảo môi trường xây dựng sạch sẽ
docker dừng dev_postgres_container
docker rm dev_postgres_container
docker rmi dev_postgres_img

# Chuẩn bị thùng chứa
docker build -f postgres.Dockerfile -t dev_postgres_img .
docker run -d --name dev_postgres_container \
    -e POSTGRES_DB=the_database \
    -e POSTGRES_USER=the_user \
    -e POSTGRES_PASSWORD=the_password \
    -e PGDATA=/var/lib/postgresql/data/pgdata
    dev_postgres_img
docker exec -it dev_postgres_container bash /make_data.sh

###
### Điều này trả về số lượng người dùng chính xác, vì vậy có dữ liệu trong vùng chứa tại thời điểm này.
###
docker exec -it dev_postgres_container /usr/bin/psql -U the_user the_database -c "select count(*) from auth_user;"

# Chuyển giao trạng thái vùng chứa và lưu vào Amazon ECR:
docker cam kết $(docker ps -q --filter "name=dev_postgres_container") 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:11-2.5-with-data

# Đồng thời gắn thẻ với "mới nhất" và dấu thời gian
thẻ docker 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:11-2.5-with-data 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data
thẻ docker 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:11-2.5-with-data 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:$( date -u +%Y%m%d_%H%MZ )-có-dữ liệu

# Đẩy
đẩy docker 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres --all-tags

Tuy nhiên, khi tôi kéo vùng chứa trong môi trường bị cô lập, không có dữ liệu:

bia cài đặt hộp ảo
brew cài đặt multipass
sudo multipass set local.driver=virtualbox
khởi chạy nhiều lần --name ubuntu2
multipass mount ~/.aws ubuntu2:/home/ubuntu/.aws
multipass mount ./db ubuntu2:/home/ubuntu/db
multipass exec ubuntu2 -- bash /home/ubuntu/db/test_db_container.sh

### Nội dung của test_db_container.sh bên dưới: ###

cuộn tròn -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

sudo apt-get cài đặt -y awscli

# Kéo container Docker:
aws ecr get-login-password --region us-east-1 | \
    đăng nhập docker sudo --username AWS --password-stdin 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com
Sudo docker pull 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data

sudo docker run -d --name the_db 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data

###
### Bảng auth_user không tồn tại.
###
sudo docker exec -it the_db /usr/bin/psql -U the_user the_database -c "select count(*) from auth_user;"

lịch sử docker sudo 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data

## Kết quả:
ẢNH TẠO TẠO THEO KÍCH THƯỚC NHẬN XÉT
854dbef239c2 23 giờ trước postgres 70B
4b1bd66a8d33 23 giờ trước SAO CHÉP ./make_data.sh /make_data.sh 3.03kB buildkit.dockerfile.v0
<missing> 23 giờ trước SAO CHÉP ./20-init_db.sql /docker-entrypoint-ini⦠188B buildkit.dockerfile.v0
<missing> 23 giờ trước MAINTAINER Tôi 0B buildkit.dockerfile.v0
[…]

Lưu ý bên lề: Tôi đã xem xét việc tạo vùng chứa khối lượng dữ liệu, nhưng phương pháp này có vẻ đơn giản hơn và được ghi lại tốt hơn.

Mặt khác lưu ý: Tôi không thể thêm dữ liệu vào Dockerfile vì Postgres cần được chạy trước khi có thể chèn dữ liệu.

Tại sao không docker cam kết lưu trạng thái vùng chứa của tôi? Tại sao hình ảnh không chứa dữ liệu?

mreferre avatar
lá cờ nl
Có khả năng là do khối lượng dữ liệu là một .... khối lượng. Xem [tại đây](https://stackoverflow.com/questions/27377876/docker-postgres-with-initial-data-is-not-persisted-over-commits)
Travis avatar
lá cờ fr
Vâng, đó là vấn đề.Tôi đã không nhận ra bộ chứa PostgreSQL đã đặt `/var/lib/postgresql/data` làm ổ đĩa. Giải pháp là [tại đây](https://stackoverflow.com/a/29956964/1477364), mặc dù tôi càng đọc nhiều thì có vẻ như một vùng chứa chỉ chứa dữ liệu là phương pháp hay nhất cho việc này. (Đăng nhận xét của bạn dưới dạng câu trả lời và tôi sẽ chấp nhận nhận xét đó.)
mreferre avatar
lá cờ nl
Mát mẻ. Vui khi biết điều đó. Xong.
Điểm:1
lá cờ nl

Theo nhận xét dưới chủ đề chính, giải pháp tương tự như giải pháp được đề xuất trong cái này hiện có câu trả lời. Nó tập trung vào thư mục dữ liệu là một ổ đĩa và do đó tồn tại bên ngoài ngữ cảnh của vùng chứa đang được sửa đổi/cam kết.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.