à¹à¸§à¸à¹à¸²à¸à¸±à¸ à¸à¸à¸±à¸à¸à¸´à¹à¸¨à¸©
สารบัญ:
การเชื่อมต่อกับคอนเทนเนอร์ Docker ที่ใช้งานจะมีประโยชน์เมื่อคุณต้องการดูว่าเกิดอะไรขึ้นภายในคอนเทนเนอร์ หากคอนเทนเนอร์ Docker ไม่ทำงานตามที่คาดไว้คุณสามารถแนบกับคอนเทนเนอร์หรือรับเชลล์ไปยังคอนเทนเนอร์และเรียกใช้คำสั่งเช่น
ps
หรือ
top
คุณยังสามารถป้อนคอนเทนเนอร์ติดตั้งแพ็คเกจใหม่และสร้างอิมเมจ Docker ใหม่ได้
ในบทช่วยสอนนี้เราจะอธิบายวิธีแนบกับกระบวนการทำงานหลักของคอนเทนเนอร์และวิธีรับเชลล์เข้ากับคอนเทนเนอร์ที่กำลังทำงาน
แนบไปกับคอนเทนเนอร์
แม้ว่ามันจะเป็นไปได้ที่จะเรียกใช้กระบวนการหลายอย่างในภาชนะบรรจุภาชนะนักเทียบท่าส่วนใหญ่กำลังทำงานเพียงกระบวนการเดียว คำสั่งที่ดำเนินการเมื่อเริ่มต้นคอนเทนเนอร์ถูกระบุโดยใช้คำ
ENTRYPOINT
และ / หรือ
RUN
คำสั่ง
docker attach
ให้คุณต่อเทอร์มินัลกับคอนเทนเนอร์ที่รันอยู่ สิ่งนี้มีประโยชน์เมื่อคุณต้องการดูสิ่งที่เขียนในเอาต์พุตมาตรฐานแบบเรียลไทม์หรือเพื่อควบคุมกระบวนการแบบโต้ตอบ
เพื่อให้เข้าใจได้ดียิ่งขึ้นว่าคำสั่ง
attach
ทำงานอย่างไรให้เรียกใช้คอนเทนเนอร์ Nginx ที่แยกออกใหม่โดยใช้อิมเมจ Nginx อย่างเป็นทางการ
docker container run --name my_nginx -d -p 8080:80 nginx
อ็อพชัน
-p 8080:80
บอกให้ Docker เชื่อมพอร์ต 8080 ของคอนเทนเนอร์ไปยังพอร์ต 80 บนเครื่องโฮสต์
ทำรายการคอนเทนเนอร์เพื่อให้แน่ใจว่าคอนเทนเนอร์“ my_nginx” กำลังทำงานอยู่:
docker container ls
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 8e1c4974a8d8 nginx "nginx -g 'daemon of…" 3 minutes ago Up 2 seconds 0.0.0.0:8080->80/tcp my_nginx
แนบกับคอนเทนเนอร์โดยใช้ ID หรือชื่อคอนเทนเนอร์:
docker container attach my_nginx
คำสั่งเริ่มต้นของภาพ nginx ซึ่งจะถูกดำเนินการเมื่อคุณเรียกใช้ภาชนะที่ถูกตั้งค่าเป็น
CMD
เมื่อคุณเรียกใช้คำสั่ง
attach
เทอร์มินัลของคุณจะแนบกับกระบวนการ
nginx
เปิด
127.0.0.1:8080
ในเบราว์เซอร์ของคุณและคุณสามารถดูผลลัพธ์ของกระบวนการ nginx ในเวลาจริง
192.168.33.1 - - "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-" 192.168.33.1 - - "GET /favicon.ico HTTP/1.1" 404 555 "http://192.168.33.71:8080/" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"
หากต้องการเข้าถึงบันทึกของคอนเทนเนอร์คุณควรใช้คำสั่ง
docker logs
หากต้องการแยกออกจากคอนเทนเนอร์โดยไม่หยุดให้ใช้คีย์ผสม
CTRL-p
CTRL-q
กด
CTRL-c
หยุดคอนเทนเนอร์
หากกระบวนการที่กำลังทำงานอยู่นั้นคุณกำลังแนบเพื่อรับอินพุตคุณสามารถส่งคำแนะนำได้
รับเชลล์ไปยังคอนเทนเนอร์
คำสั่ง
docker exec
ช่วยให้คุณสามารถเรียกใช้คำสั่งภายในคอนเทนเนอร์ที่รันอยู่
ในการดูว่าคำสั่ง
exec
ทำงานอย่างไรและสามารถใช้เพื่อป้อนคอนเทนเนอร์เชลล์ได้อย่างไรก่อนอื่นให้เริ่มคอนเทนเนอร์ใหม่ เราจะใช้ภาพ MySQL อย่างเป็นทางการ:
docker container run --name my_mysql -d mysql
สิ่งนี้จะสร้างคอนเทนเนอร์ชื่อ“ my_mysql”
เพื่อรันคำสั่งภายในคอนเทนเนอร์ให้รันคำสั่งต่อไปนี้:
docker container exec -it my_mysql ls /var
ตัวเลือก
-i
ย่อมาจากการโต้ตอบและ
-t
บอกนักเทียบท่าในการจัดสรรอุปกรณ์ TTY หลอก
ls
สั่ง
ls
จะแสดงรายการไฟล์และไดเรกทอรีทั้งหมดภายในไดเรกทอรี
/var
ของคอนเทนเนอร์:
backups cache lib local lock log mail opt run spool tmp
ในการรับเชลล์ไปยังคอนเทนเนอร์เช่นเพื่อเข้าสู่ภายในคอนเทนเนอร์ให้เริ่มเซสชันเชลล์ใหม่โดยดำเนินการเชลล์ไบนารี คุณสามารถใช้
sh
bash
หรือเปลือกอื่น ๆ ที่รวมอยู่ในภาพ
คำสั่งด้านล่างจะสร้างเซสชัน Bash ใหม่ภายในคอนเทนเนอร์:
docker container exec -it my_mysql /bin/bash
พรอมต์คำสั่งของคุณจะเปลี่ยนแสดงว่าขณะนี้คุณกำลังทำงานบนเชลล์คอนเทนเนอร์
จากที่นี่คุณสามารถเรียกใช้คำสั่งในลักษณะเดียวกับที่คุณทำบนเซิร์ฟเวอร์ Linux อื่น ๆ ตัวอย่างเช่นในการรับรายการตัวแปรสภาพแวดล้อมปัจจุบันให้พิมพ์
env
:
env
ผลลัพธ์จะมีลักษณะดังนี้:
HOSTNAME=e0214d97e0fe MYSQL_ROOT_PASSWORD=my-secret-pw PWD=/ HOME=/root MYSQL_MAJOR=8.0 GOSU_VERSION=1.7 MYSQL_VERSION=8.0.17-1debian9 TERM=xterm SHLVL=1 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin _=/usr/bin/env
ข้อสรุป
คำสั่ง
docker exec
และ
docker attach
ช่วยให้คุณสามารถเชื่อมต่อกับภาชนะที่ทำงานอยู่ ในการรับเชลล์แบบโต้ตอบไปยังคอนเทนเนอร์ให้ใช้คำสั่ง
exec
เพื่อเริ่มเชลล์เซสชันใหม่ คำสั่ง
attach
แนบเทอร์มินัลของคุณเข้ากับคอนเทนเนอร์ที่รันอยู่