Android

วิธีเชื่อมต่อกับคอนเทนเนอร์นักเทียบท่า

เวก้าผับ ฉบับพิเศษ

เวก้าผับ ฉบับพิเศษ

สารบัญ:

Anonim

การเชื่อมต่อกับคอนเทนเนอร์ 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 แนบเทอร์มินัลของคุณเข้ากับคอนเทนเนอร์ที่รันอยู่

นักเทียบท่า