Score:0

เหตุใดคอนเทนเนอร์ของฉันจึงไม่มีข้อมูล DB หลังจากที่ฉันยืนยันแล้ว

ธง fr

ฉันกำลังพยายามสร้างคอนเทนเนอร์ PostgreSQL ที่มีข้อมูลการพัฒนาอยู่แล้ว ฉันสามารถดูข้อมูลที่ฉันสร้างขึ้นได้ แต่เมื่อฉัน ให้สัญญา, ดัน, และ ดึง รูปไม่มีข้อมูล

ด้านล่างนี้คือไฟล์ Dockerfile ของฉัน:

จาก postgis/postgis:11-2.5
ผู้ดูแลฉัน

# เนื้อหาของ 20-init_db.sql:
# สร้างส่วนขยายหากไม่มีอยู่ btree_gist;
# สร้างส่วนขยายหากไม่มีอยู่ hstore;
สำเนา ./20-init_db.sql /docker-entrypoint-initdb.d/20-init_db.sql
สำเนา ./make_data.sh /make_data.sh

ฉันสร้างคอนเทนเนอร์โดยใช้สคริปต์ด้านล่าง และเติมข้อมูลสำเร็จแล้ว

#!/bin/bash

aws ecr รับรหัสผ่านเข้าสู่ระบบ --region us-east-1 | \
    เข้าสู่ระบบนักเทียบท่า --ชื่อผู้ใช้ AWS --รหัสผ่าน-stdin 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com

aws ecr create-repository --repository-name dev_postgres --region us-east-1

# ตรวจสอบให้แน่ใจว่าสภาพแวดล้อมการสร้างนั้นสะอาด
นักเทียบท่าหยุด dev_postgres_container
นักเทียบท่า rm dev_postgres_container
นักเทียบท่า rmi dev_postgres_img

#เตรียมภาชนะ
นักเทียบท่า build -f postgres.Dockerfile -t dev_postgres_img
นักเทียบท่ารัน -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
นักเทียบท่า exec -it dev_postgres_container bash /make_data.sh

###
### ส่งคืนจำนวนผู้ใช้ที่ถูกต้อง ดังนั้นจึงมีข้อมูลในคอนเทนเนอร์ ณ จุดนี้
###
นักเทียบท่า exec -it dev_postgres_container /usr/bin/psql -U the_user the_database -c "เลือกจำนวน (*) จาก auth_user;"

# ยอมรับสถานะคอนเทนเนอร์และบันทึกลงใน Amazon ECR:
นักเทียบท่ากระทำ $(นักเทียบท่า ps -q --filter "ชื่อ=dev_postgres_container") 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:11-2.5-with-data 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data
แท็กนักเทียบท่า 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 )-พร้อมข้อมูล

# ดัน
นักเทียบท่ากด 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres --all-tags

อย่างไรก็ตาม เมื่อฉันดึงคอนเทนเนอร์ในสภาพแวดล้อมแยก ไม่มีข้อมูล:

ชงติดตั้ง virtualbox
ชงติดตั้ง multipass
sudo multipass ตั้งค่า local.driver=virtualbox
การเปิดตัว multipass -- ชื่อ ubuntu2
มัลติพาสเมาท์ ~/.aws ubuntu2:/home/ubuntu/.aws
multipass mount ./db ubuntu2:/home/ubuntu/db
มัลติพาส exec ubuntu2 - ทุบตี /home/ubuntu/db/test_db_container.sh

### เนื้อหาของ test_db_container.sh อยู่ด้านล่าง: ###

curl -fsSL https://get.docker.com -o get-docker.sh
sudo sh get-docker.sh

sudo apt-get install -y awscli

# ดึงคอนเทนเนอร์ Docker:
aws ecr รับรหัสผ่านเข้าสู่ระบบ --region us-east-1 | \
    sudo docker เข้าสู่ระบบ --ชื่อผู้ใช้ AWS --รหัสผ่าน-stdin 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com
sudo docker ดึง 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

###
### ไม่มีตาราง auth_user
###
sudo docker exec -it the_db /usr/bin/psql -U the_user the_database -c "เลือกจำนวน (*) จาก auth_user;"

ประวัตินักเทียบท่า sudo 23456789JQKA.dkr.ecr.us-east-1.amazonaws.com/dev_postgres:latest-with-data

## ผลลัพธ์:
รูปภาพที่สร้างโดยความคิดเห็นเกี่ยวกับขนาด
854dbef239c2 23 ชั่วโมงที่แล้ว postgres 70B
4b1bd66a8d33 23 ชั่วโมงที่แล้ว COPY ./make_data.sh /make_data.sh 3.03kB buildkit.dockerfile.v0
<ขาดหายไป> 23 ชั่วโมงที่แล้ว COPY ./20-init_db.sql /docker-entrypoint-ini⦠188B buildkit.dockerfile.v0
<ขาดหายไป> 23 ชั่วโมงที่แล้ว MAINTAINER Me 0B buildkit.dockerfile.v0
[...]

หมายเหตุด้านข้าง: ฉันได้พิจารณาสร้างคอนเทนเนอร์ปริมาณข้อมูล แต่วิธีนี้ดูง่ายกว่าและมีเอกสารที่ดีกว่า

หมายเหตุด้านอื่น ๆ: ฉันไม่สามารถเพิ่มข้อมูลใน Dockerfile ได้เนื่องจาก Postgres จำเป็นต้องทำงานก่อนที่จะสามารถแทรกข้อมูลได้

ทำไมไม่ นักเทียบท่ากระทำ บันทึกสถานะคอนเทนเนอร์ของฉันหรือไม่ ทำไมภาพถึงไม่มีข้อมูล?

mreferre avatar
nl flag
อาจเป็นเพราะปริมาณข้อมูลเป็น .... ปริมาณ ดู[ที่นี่](https://stackoverflow.com/questions/27377876/docker-postgres-with-initial-data-is-not-persisted-over-commits)
Travis avatar
fr flag
ใช่ นั่นคือปัญหาฉันไม่ทราบว่าคอนเทนเนอร์ PostgreSQL ตั้งค่า `/var/lib/postgresql/data` เป็นโวลุ่ม วิธีแก้ไขคือ [ที่นี่](https://stackoverflow.com/a/29956964/1477364) แม้ว่ายิ่งฉันอ่านมากเท่าไหร่ ก็ยิ่งดูเหมือนว่าคอนเทนเนอร์ที่ใช้ข้อมูลเท่านั้นเป็นแนวทางปฏิบัติที่ดีที่สุดสำหรับสิ่งนี้ (โพสต์ความคิดเห็นของคุณเป็นคำตอบและฉันจะยอมรับ)
mreferre avatar
nl flag
เย็น. มีความสุขที่ได้ยินว่า เสร็จแล้ว.
Score:1
ธง nl

ตามความคิดเห็นภายใต้เธรดหลัก วิธีแก้ปัญหานั้นคล้ายกับที่แนะนำไว้ ที่มีอยู่นี้ คำตอบ. มันทำให้ไดเร็กทอรีข้อมูลเป็นไดรฟ์ข้อมูลและด้วยเหตุนี้จึงอยู่นอกบริบทของคอนเทนเนอร์ที่ถูกแก้ไข / คอมมิต

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา