วิธีใช้ Docker Cp เพื่อคัดลอกไฟล์ระหว่างโฮสต์และคอนเทนเนอร์
ส.ค. 27, 2021, 7:30 น. EDT | อ่าน 4 นาที
ต้องการรับไฟล์บางไฟล์เข้าหรือออกจาก Docker คอนเทนเนอร์? คำสั่ง
docker cp
ช่วยให้ คุณคัดลอกระหว่างระบบไฟล์โฮสต์และคอนเทนเนอร์ เพื่อให้คุณสามารถเพิ่มรายละเอียดการกำหนดค่า สร้างการสำรองข้อมูล และกู้คืนข้อมูลที่มีอยู่
ไวยากรณ์พื้นฐาน
docker cp
ยอมรับเส้นทางต้นทางและปลายทางเป็นสองเส้นทาง อาร์กิวเมนต์:
ตัวอย่าง docker cp txt my-container:/example.txt
ที่นี่
example.txt
กำลังถูกคัดลอกจากไดเร็กทอรีการทำงานของคุณไปยัง /example.txt
ใน คอนเทนเนอร์ของฉัน คุณสามารถย้อนกลับอาร์กิวเมนต์ทั้งสองเพื่อคัดลอก /example.txt ออกจากคอนเทนเนอร์และไปยังไดเร็กทอรีการทำงานของคุณ อาร์กิวเมนต์ที่อ้างอิงพาธคอนเทนเนอร์จะต้องนำหน้าด้วย ID คอนเทนเนอร์หรือชื่อตามด้วยโคลอน (
:
). คุณสามารถค้นหา ID หรือชื่อของคอนเทนเนอร์ที่ทำงานอยู่ด้วย docker ps
.

แต่ละ docker cp
คำสั่งต้องการหนึ่งเส้นทางระบบไฟล์ในเครื่องและหนึ่งเส้นทางคอนเทนเนอร์ - คุณทำได้' คัดลอกโดยตรงระหว่างสองคอนเทนเนอร์ ใช้โพรซีเดอร์แบบหลายขั้นตอน หากคุณต้องการทำสิ่งนี้ ให้คัดลอกจากคอนเทนเนอร์ต้นทางไปยังระบบไฟล์ของคุณก่อน จากนั้นจึงคัดลอกจากโลคัลพาธใหม่ไปยังคอนเทนเนอร์เป้าหมาย 
กำลังคัดลอกไดเรกทอรีทั้งหมด
นักเทียบท่า cp สามารถคัดลอกไดเร็กทอรีแบบเรียกซ้ำได้เช่นกัน:
docker cp /home/demo/website apache-container:/var/www/html/.
Docker จะคัดลอกทุกอย่างใน
/home/demo/website และโอนเข้า
/var/www/html.
พฤติกรรมการคัดลอก
เมื่อคุณคัดลอกไฟล์ Docker จะสร้างไฟล์ใหม่ที่ปลายทางหากยังไม่มีอยู่ ไฟล์ที่มีอยู่จะถูกเขียนทับด้วยเนื้อหาใหม่ เมื่อไดเร็กทอรีปลายทางเป็นไดเร็กทอรี ไฟล์จะถูกคัดลอกลงในไดเร็กทอรีโดยใช้ชื่อไฟล์ต้นทาง ข้อยกเว้นคือเมื่อปลายทางที่ระบุลงท้ายด้วย
/ หมายถึงไดเร็กทอรี แต่ไม่มีเส้นทางอยู่แล้ว ในสถานการณ์สมมตินี้ จะเกิดข้อผิดพลาด
กระบวนการนี้ซับซ้อนกว่าเล็กน้อยสำหรับการคัดลอกไดเรกทอรี ไดเร็กทอรีใหม่จะถูกสร้างขึ้นที่ปลายทางโดยมีเนื้อหาของไดเร็กทอรีต้นทาง ถ้าเส้นทางปลายทางไม่มีอยู่แล้ว เมื่อมีอยู่ ลักษณะการทำงานจะแตกต่างกันไปขึ้นอยู่กับว่าคุณได้รวมส่วนท้าย
/.
องค์ประกอบในเส้นทาง
-
/.
มีอยู่ - แหล่งที่มา ไดเร็กทอรี ถูกคัดลอกไปยังไดเร็กทอรีปลายทางที่มีอยู่
/. ไม่มี – The เนื้อหา ของไดเรกทอรีต้นทางถูกคัดลอกไปยังปลายทาง
ความละเอียดอ่อน ความแตกต่างกำหนดว่าจะสร้างไดเร็กทอรีย่อยใหม่หรือไม่ ภายในปลายทาง
ข้อจำกัดของคำสั่ง
แม้จะมีชื่อ docker cp
ไม่ใช่การใช้งานที่สมบูรณ์ของ
cp คำสั่งเชลล์ แฟล็ก cp ไม่ใช่ รองรับยกเว้น -a
และ
-L
:
-NS
– โหมดเก็บถาวรซึ่ง รักษารายละเอียดผู้ใช้และกลุ่มในไฟล์ที่คัดลอก
-L – ติดตาม symlink ในไดเรกทอรีต้นทางไปยัง คัดลอกเนื้อหาของลิงก์เป้าหมาย แทนที่จะเป็นลิงก์เอง
สำหรับกรณีการใช้งานขั้นสูงที่การเลือกคัดลอก จำเป็น คุณจะต้องใช้ทางเลือกอื่นแทน
การใช้ Bind Mounts เพื่อคัดลอกไฟล์ ปริมาณ Docker ให้ วิธีอื่นในการย้ายไฟล์ระหว่างคอนเทนเนอร์และโฮสต์ของคุณ ผูกการติดตั้งโลคัลไดเร็กทอรีลงในคอนเทนเนอร์ ช่วยให้คุณเข้าถึงเนื้อหาจากระบบไฟล์โฮสต์ของคุณ โดยไม่จำเป็นต้องใช้
docker cp. docker run -v /example/host/directory:/container/path my-image:latest
เนื้อหาของ
/example/host/directory เส้นทางถูกเมาท์ในระบบไฟล์ของคอนเทนเนอร์ที่ /container/path. คุณสามารถโต้ตอบกับไฟล์เหล่านี้นอก Docker โดยใช้เครื่องมือที่คุ้นเคย เช่น cp, rsync และเบราว์เซอร์ไฟล์กราฟิกของคุณ
เทคนิคนี้มีประโยชน์เฉพาะเมื่อคุณทำงานกับไดเร็กทอรีคอนเทนเนอร์เดียว มันทำงานได้ไม่ดีเมื่อคุณคัดลอกจากตำแหน่งที่กำหนดเอง เนื่องจากคุณจำเป็นต้องทราบเส้นทางที่คุณจะใช้ล่วงหน้าเมื่อสร้างคอนเทนเนอร์
คุณควรระวังการอนุญาตระบบไฟล์ด้วย: ไฟล์ที่สร้างภายในคอนเทนเนอร์มักจะเป็นเจ้าของโดยรูท
. สิ่งนี้สามารถสร้างสถานการณ์ที่น่าอึดอัดใจบนโฮสต์ที่คุณไม่สามารถแก้ไขหรือลบไฟล์ภายในไดเร็กทอรีที่ถูกผูกไว้ ใช้คำสั่ง chown บน โฮสต์และภายในคอนเทนเนอร์เพื่อสลับความเป็นเจ้าของขึ้นอยู่กับสภาพแวดล้อมหากจำเป็น
เกี่ยวกับอะไร COPY ใน Dockerfiles?
นักเทียบท่า cp
บางครั้งอาจสับสนกับ
COPY
คำแนะนำใน Dockerfiles สิ่งสำคัญคือต้องตระหนักว่าคุณสมบัติทั้งสองนี้รองรับกรณีการใช้งานที่แตกต่างกันมาก
COPY
ไม่สามารถใช้เพื่อย้ายไฟล์ระหว่างโฮสต์และคอนเทนเนอร์ที่ทำงานอยู่ ใช้สำหรับรับไฟล์เข้า ภาพ ระหว่างกระบวนการสร้าง:
COPY /home/me/my-website /var/www/html/.
ซอร์สโค้ดของเว็บไซต์ที่นี่ถูกคัดลอกลงในรูปภาพซึ่งเป็นส่วนหนึ่งของบิลด์ นี่เป็นกระบวนการแบบครั้งเดียว ทุกคอนเทนเนอร์ที่เริ่มต้นจากอิมเมจจะรวมที่มาของเว็บไซต์เหมือนตอนที่คุณรัน
docker build.
docker cp
ให้คุณแทนที่ซอร์สโค้ดนั้นด้วยเวอร์ชันที่ใหม่กว่าเมื่อคอนเทนเนอร์เป็น วิ่ง.
COPY คำแนะนำสำหรับการทำ ไฟล์ส่วนหนึ่งของภาพนิ่ง
cp คำสั่งโต้ตอบกับ live ตู้คอนเทนเนอร์ เมื่อใดควรคัดลอกไฟล์ด้วย Docker
การคัดลอกไฟล์ด้วยตนเองจากโฮสต์ของคุณไปยังคอนเทนเนอร์ Docker หรือในทางกลับกัน น่าจะเป็นเหตุการณ์ที่ค่อนข้างหายาก รูปภาพมีไว้เพื่อให้พอเพียง ดังนั้นควรมาพร้อมกับทุกสิ่งที่คุณต้องการเพื่อเริ่มต้นอินสแตนซ์ การกำหนดค่ามักจะได้รับการจัดการผ่านตัวแปรสภาพแวดล้อม
คอนเทนเนอร์ที่จำเป็นต้องจัดเก็บข้อมูลอย่างต่อเนื่องควรใช้โวลุ่ม Docker ไดรฟ์ข้อมูลช่วยให้ข้อมูลมีอายุยืนกว่าคอนเทนเนอร์เดียว คุณจึงไม่ต้องดำเนินการด้วยตนเอง
docker cp
ก่อนแทนที่อินสแตนซ์ เมื่อคุณทำการสำรองข้อมูล ให้คัดลอกโวลุ่มจากโฮสต์ของคุณ แทนที่จะดึงไฟล์ออกจากคอนเทนเนอร์ docker cp มีประโยชน์มากที่สุดเมื่อทำการดีบักคอนเทนเนอร์หรือทำงานใน สภาพแวดล้อมการพัฒนา บางครั้งคุณจำเป็นต้องฉีดไฟล์กำหนดค่าชั่วคราวด้วยตนเองหรือดึงบันทึกที่ฝังไว้ การใช้ docker cp
เร็วขึ้น และสะดวกกว่าการสร้างใหม่ทั้งภาพทุกครั้งที่คุณเปลี่ยนรหัส
โปรดจำไว้เสมอว่าไฟล์ที่คัดลอกมา เข้าไปข้างใน คอนเทนเนอร์จะคงอยู่ตราบเท่าที่คอนเทนเนอร์ยังมีชีวิต การเริ่มคอนเทนเนอร์อื่นจากอิมเมจเดียวกันจะทำให้คุณมีกระดานชนวนที่สะอาดตา โดยไม่มีไฟล์ที่คุณเพิ่มด้วย
docker cp. สรุป
นักเทียบท่า cp ให้คุณย้ายไฟล์ระหว่างโฮสต์และคอนเทนเนอร์ Docker ของคุณ ใช้งานได้กับไฟล์และไดเร็กทอรี แต่ไม่มีฟังก์ชันขั้นสูงส่วนใหญ่ในเชลล์
cp
คำสั่ง
/example.txt
ใน คอนเทนเนอร์ของฉัน คุณสามารถย้อนกลับอาร์กิวเมนต์ทั้งสองเพื่อคัดลอก /example.txt ออกจากคอนเทนเนอร์และไปยังไดเร็กทอรีการทำงานของคุณ อาร์กิวเมนต์ที่อ้างอิงพาธคอนเทนเนอร์จะต้องนำหน้าด้วย ID คอนเทนเนอร์หรือชื่อตามด้วยโคลอน (
:
). คุณสามารถค้นหา ID หรือชื่อของคอนเทนเนอร์ที่ทำงานอยู่ด้วย docker ps
.
แต่ละ docker cp
คำสั่งต้องการหนึ่งเส้นทางระบบไฟล์ในเครื่องและหนึ่งเส้นทางคอนเทนเนอร์ - คุณทำได้' คัดลอกโดยตรงระหว่างสองคอนเทนเนอร์ ใช้โพรซีเดอร์แบบหลายขั้นตอน หากคุณต้องการทำสิ่งนี้ ให้คัดลอกจากคอนเทนเนอร์ต้นทางไปยังระบบไฟล์ของคุณก่อน จากนั้นจึงคัดลอกจากโลคัลพาธใหม่ไปยังคอนเทนเนอร์เป้าหมาย
นักเทียบท่า cp สามารถคัดลอกไดเร็กทอรีแบบเรียกซ้ำได้เช่นกัน:
docker cp /home/demo/website apache-container:/var/www/html/.
Docker จะคัดลอกทุกอย่างใน
/home/demo/website และโอนเข้า
/var/www/html.
เมื่อคุณคัดลอกไฟล์ Docker จะสร้างไฟล์ใหม่ที่ปลายทางหากยังไม่มีอยู่ ไฟล์ที่มีอยู่จะถูกเขียนทับด้วยเนื้อหาใหม่ เมื่อไดเร็กทอรีปลายทางเป็นไดเร็กทอรี ไฟล์จะถูกคัดลอกลงในไดเร็กทอรีโดยใช้ชื่อไฟล์ต้นทาง ข้อยกเว้นคือเมื่อปลายทางที่ระบุลงท้ายด้วย
/ หมายถึงไดเร็กทอรี แต่ไม่มีเส้นทางอยู่แล้ว ในสถานการณ์สมมตินี้ จะเกิดข้อผิดพลาด
กระบวนการนี้ซับซ้อนกว่าเล็กน้อยสำหรับการคัดลอกไดเรกทอรี ไดเร็กทอรีใหม่จะถูกสร้างขึ้นที่ปลายทางโดยมีเนื้อหาของไดเร็กทอรีต้นทาง ถ้าเส้นทางปลายทางไม่มีอยู่แล้ว เมื่อมีอยู่ ลักษณะการทำงานจะแตกต่างกันไปขึ้นอยู่กับว่าคุณได้รวมส่วนท้าย
/.
องค์ประกอบในเส้นทาง
/.
มีอยู่ - แหล่งที่มา ไดเร็กทอรี ถูกคัดลอกไปยังไดเร็กทอรีปลายทางที่มีอยู่
/.
ไม่มี – The เนื้อหา ของไดเรกทอรีต้นทางถูกคัดลอกไปยังปลายทางความละเอียดอ่อน ความแตกต่างกำหนดว่าจะสร้างไดเร็กทอรีย่อยใหม่หรือไม่ ภายในปลายทาง
ข้อจำกัดของคำสั่ง
แม้จะมีชื่อ
docker cp
ไม่ใช่การใช้งานที่สมบูรณ์ของcp
คำสั่งเชลล์ แฟล็กcp
ไม่ใช่ รองรับยกเว้น-a
และ
-L
:
-NS
– โหมดเก็บถาวรซึ่ง รักษารายละเอียดผู้ใช้และกลุ่มในไฟล์ที่คัดลอก
-L – ติดตาม symlink ในไดเรกทอรีต้นทางไปยัง คัดลอกเนื้อหาของลิงก์เป้าหมาย แทนที่จะเป็นลิงก์เอง
สำหรับกรณีการใช้งานขั้นสูงที่การเลือกคัดลอก จำเป็น คุณจะต้องใช้ทางเลือกอื่นแทน
การใช้ Bind Mounts เพื่อคัดลอกไฟล์ปริมาณ Docker ให้ วิธีอื่นในการย้ายไฟล์ระหว่างคอนเทนเนอร์และโฮสต์ของคุณ ผูกการติดตั้งโลคัลไดเร็กทอรีลงในคอนเทนเนอร์ ช่วยให้คุณเข้าถึงเนื้อหาจากระบบไฟล์โฮสต์ของคุณ โดยไม่จำเป็นต้องใช้
docker cp.
docker run -v /example/host/directory:/container/path my-image:latest
เนื้อหาของ
/example/host/directory เส้นทางถูกเมาท์ในระบบไฟล์ของคอนเทนเนอร์ที่
/container/path
. คุณสามารถโต้ตอบกับไฟล์เหล่านี้นอก Docker โดยใช้เครื่องมือที่คุ้นเคย เช่นcp,
rsync
และเบราว์เซอร์ไฟล์กราฟิกของคุณ
เทคนิคนี้มีประโยชน์เฉพาะเมื่อคุณทำงานกับไดเร็กทอรีคอนเทนเนอร์เดียว มันทำงานได้ไม่ดีเมื่อคุณคัดลอกจากตำแหน่งที่กำหนดเอง เนื่องจากคุณจำเป็นต้องทราบเส้นทางที่คุณจะใช้ล่วงหน้าเมื่อสร้างคอนเทนเนอร์
คุณควรระวังการอนุญาตระบบไฟล์ด้วย: ไฟล์ที่สร้างภายในคอนเทนเนอร์มักจะเป็นเจ้าของโดยรูท
. สิ่งนี้สามารถสร้างสถานการณ์ที่น่าอึดอัดใจบนโฮสต์ที่คุณไม่สามารถแก้ไขหรือลบไฟล์ภายในไดเร็กทอรีที่ถูกผูกไว้ ใช้คำสั่งchown
บน โฮสต์และภายในคอนเทนเนอร์เพื่อสลับความเป็นเจ้าของขึ้นอยู่กับสภาพแวดล้อมหากจำเป็น
เกี่ยวกับอะไรCOPY
บางครั้งอาจสับสนกับใน Dockerfiles?นักเทียบท่า cpCOPY
คำแนะนำใน Dockerfiles สิ่งสำคัญคือต้องตระหนักว่าคุณสมบัติทั้งสองนี้รองรับกรณีการใช้งานที่แตกต่างกันมาก
COPY
ไม่สามารถใช้เพื่อย้ายไฟล์ระหว่างโฮสต์และคอนเทนเนอร์ที่ทำงานอยู่ ใช้สำหรับรับไฟล์เข้า ภาพ ระหว่างกระบวนการสร้าง:COPY /home/me/my-website /var/www/html/.ซอร์สโค้ดของเว็บไซต์ที่นี่ถูกคัดลอกลงในรูปภาพซึ่งเป็นส่วนหนึ่งของบิลด์ นี่เป็นกระบวนการแบบครั้งเดียว ทุกคอนเทนเนอร์ที่เริ่มต้นจากอิมเมจจะรวมที่มาของเว็บไซต์เหมือนตอนที่คุณรัน
docker build.
docker cp
ให้คุณแทนที่ซอร์สโค้ดนั้นด้วยเวอร์ชันที่ใหม่กว่าเมื่อคอนเทนเนอร์เป็น วิ่ง.COPY
คำแนะนำสำหรับการทำ ไฟล์ส่วนหนึ่งของภาพนิ่งcp
คำสั่งโต้ตอบกับ live ตู้คอนเทนเนอร์เมื่อใดควรคัดลอกไฟล์ด้วย Docker
การคัดลอกไฟล์ด้วยตนเองจากโฮสต์ของคุณไปยังคอนเทนเนอร์ Docker หรือในทางกลับกัน น่าจะเป็นเหตุการณ์ที่ค่อนข้างหายาก รูปภาพมีไว้เพื่อให้พอเพียง ดังนั้นควรมาพร้อมกับทุกสิ่งที่คุณต้องการเพื่อเริ่มต้นอินสแตนซ์ การกำหนดค่ามักจะได้รับการจัดการผ่านตัวแปรสภาพแวดล้อม
คอนเทนเนอร์ที่จำเป็นต้องจัดเก็บข้อมูลอย่างต่อเนื่องควรใช้โวลุ่ม Docker ไดรฟ์ข้อมูลช่วยให้ข้อมูลมีอายุยืนกว่าคอนเทนเนอร์เดียว คุณจึงไม่ต้องดำเนินการด้วยตนเอง
docker cp
ก่อนแทนที่อินสแตนซ์ เมื่อคุณทำการสำรองข้อมูล ให้คัดลอกโวลุ่มจากโฮสต์ของคุณ แทนที่จะดึงไฟล์ออกจากคอนเทนเนอร์
docker cp
เร็วขึ้น และสะดวกกว่าการสร้างใหม่ทั้งภาพทุกครั้งที่คุณเปลี่ยนรหัสมีประโยชน์มากที่สุดเมื่อทำการดีบักคอนเทนเนอร์หรือทำงานใน สภาพแวดล้อมการพัฒนา บางครั้งคุณจำเป็นต้องฉีดไฟล์กำหนดค่าชั่วคราวด้วยตนเองหรือดึงบันทึกที่ฝังไว้ การใช้docker cp
โปรดจำไว้เสมอว่าไฟล์ที่คัดลอกมา เข้าไปข้างใน คอนเทนเนอร์จะคงอยู่ตราบเท่าที่คอนเทนเนอร์ยังมีชีวิต การเริ่มคอนเทนเนอร์อื่นจากอิมเมจเดียวกันจะทำให้คุณมีกระดานชนวนที่สะอาดตา โดยไม่มีไฟล์ที่คุณเพิ่มด้วย
docker cp. สรุป
นักเทียบท่า cp ให้คุณย้ายไฟล์ระหว่างโฮสต์และคอนเทนเนอร์ Docker ของคุณ ใช้งานได้กับไฟล์และไดเร็กทอรี แต่ไม่มีฟังก์ชันขั้นสูงส่วนใหญ่ในเชลล์
cp
คำสั่ง
การใช้งานปกติของ
docker cp
บ่งชี้ถึงการออกจากแนวปฏิบัติที่ดีที่สุดของคอนเทนเนอร์ ถือว่าเป็นการดีที่จะถือว่าเครื่องมือนี้เป็นเครื่องมืออำนวยความสะดวกสำหรับการพัฒนา แทนที่จะเป็นส่วนสำคัญของการทำงานกับคอนเทนเนอร์ การคงอยู่ของไฟล์ในระยะยาวควรใช้กับโวลุ่ม เนื่องจากสิ่งเหล่านี้เป็นส่วนประกอบชั้นหนึ่งในระบบนิเวศของ Docker บ้าน
ธุรกิจ การดูแลสุขภาพ
ไลฟ์สไตล์ เทค โลก
อาหาร
เกม
การท่องเที่ยว
บ้าน
ธุรกิจ การดูแลสุขภาพ
ไลฟ์สไตล์ เทค โลก
อาหาร
เกม
การท่องเที่ยว