ไฟล์เขียนของนักเทียบท่าของฉันมีสามคอนเทนเนอร์เว็บ nginx และ postgres Postgres มีลักษณะเช่นนี้:
postgres:
container_name: postgres
restart: always
image: postgres:latest
volumes:
- ./database:/var/lib/postgresql
ports:
- "5432:5432
เป้าหมายของฉันคือการติดปริมาณซึ่งสอดคล้องกับโฟลเดอร์ท้องถิ่นเรียกว่า./database
ภายใน postgres /var/lib/postgres
คอนเทนเนอร์ เมื่อฉันเริ่มต้นคอนเทนเนอร์เหล่านี้และแทรกข้อมูลลงใน postgres ฉันตรวจสอบว่า/var/lib/postgres/data/base/
เต็มไปด้วยข้อมูลที่ฉันเพิ่ม (ในคอนเทนเนอร์ postgres) แต่ในระบบท้องถิ่นของฉัน./database
จะได้รับdata
โฟลเดอร์เท่านั้นเช่น./database/data
ถูกสร้างขึ้น แต่ว่างเปล่า . ทำไม?
หมายเหตุ:
อัพเดท 1
ตามคำแนะนำของ Nick ฉันได้docker inspect
และพบ:
"Mounts": [
{
"Source": "/Users/alex/Documents/MyApp/database",
"Destination": "/var/lib/postgresql",
"Mode": "rw",
"RW": true,
"Propagation": "rprivate"
},
{
"Name": "e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35",
"Source": "/var/lib/docker/volumes/e5bf22471215db058127109053e72e0a423d97b05a2afb4824b411322efd2c35/_data",
"Destination": "/var/lib/postgresql/data",
"Driver": "local",
"Mode": "",
"RW": true,
"Propagation": ""
}
],
ซึ่งทำให้ดูเหมือนว่าข้อมูลกำลังถูกขโมยโดยโวลุ่มอื่นที่ฉันไม่ได้รหัสด้วยตัวเอง ไม่แน่ใจว่าทำไม ภาพ postgres สร้างระดับเสียงนั้นสำหรับฉันหรือไม่ ถ้าเป็นเช่นนั้นจะมีวิธีการใช้ระดับเสียงนั้นแทนที่จะเป็นปริมาณที่ฉันกำลังติดตั้งเมื่อฉันรีสตาร์ท? มิฉะนั้นจะมีวิธีที่ดีในการปิดการใช้งานไดรฟ์ข้อมูลอื่นและใช้งานเอง./database
หรือไม่?
อัพเดท 2
ฉันพบวิธีแก้ปัญหาขอบคุณ Nick! (และเพื่อนอีกคน) คำตอบด้านล่าง
from app import db
และdb.create_all()
จากdocker run
หลังจากที่เริ่มต้นภาชนะบรรจุ ฉันไม่ได้initdb
โดยตรงจากบรรทัดคำสั่ง
sudo su -
และมอง./database/data
มา ไม่มีอะไรในนั้นเท่าที่ฉันสามารถบอกได้
initdb
บรรทัดคำสั่งแล้วเพื่อเริ่มต้นคลัสเตอร์ฐานข้อมูลของคุณหรือไม่