เชื่อมต่อจากภาชนะนักเทียบท่าไปยังโฮสต์นักเทียบท่า


10

ฉันมีการตั้งค่าที่ฉันเรียกใช้ทุกส่วนของเว็บไซต์ของฉันในคอนเทนเนอร์นักเทียบท่า nginx ของฉันที่ฟังพอร์ต 80 และ 443 ทำงานในคอนเทนเนอร์

363292a98545        scivm/nginx-django-scivmcom:latest   /usr/bin/supervisord   12 days ago         Ghost               0.0.0.0:40001->22/tcp, 88.198.57.112:443->443/tcp, 88.198.57.112:80->80/tcp     lonely_feynmann           

ฉันต้องการตั้งค่าพร็อกซีให้บริการในคอนเทนเนอร์อื่น คอนเทนเนอร์นี้ถูกผูกไว้กับพอร์ต 3000 บนโฮสต์:

b38c8ef72d0a        mazzolino/strider-dind:latest        wrapdocker /usr/bin/   41 minutes ago      Up 41 minutes       0.0.0.0:3000->3000/tcp, 22/tcp, 27017/tcp                                       distracted_einstein      

iptables ของฉันในโฮสต์นักเทียบท่ามีลักษณะเช่นนี้:

root@Ubuntu-1204-precise-64-minimal /var/run # iptables -L
Chain INPUT (policy ACCEPT) target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:ssh
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:8000
DROP       all  --  anywhere             anywhere            

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination         
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere            
ACCEPT     all  --  anywhere             anywhere             ctstate RELATED,ESTABLISHED

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination         

จากภายในคอนเทนเนอร์ฉันไม่สามารถเชื่อมต่อกับพอร์ต 3000 บนเครื่องโฮสต์ได้เนื่องจากการกำหนดค่า iptables

ฉันไม่ต้องการเปิดพอร์ต 3000 ไปยังอินเทอร์เน็ตสาธารณะ

มีวิธีในการเปิดบริดจ์โดยตรงระหว่างคอนเทนเนอร์และโฮสต์บนพอร์ต 3000 หรือไม่

หรือฉันควรแก้ไข iptables ของฉันเพื่อยอมรับจากช่วงนักเทียบท่า ip?

คำตอบ:


5

สิ่งที่คุณต้องมีคือความสามารถในการเชื่อมโยงของนักเทียบท่า[เลิกใช้งาน]

เพียงกำจัดสิ่งที่ซับซ้อนทั้งหมดที่คุณพยายามทำและเริ่มใช้คอนเทนเนอร์ที่มีชื่อแล้วเชื่อมโยงกัน


ฉันดูที่ความสามารถในการเชื่อมโยงนักเทียบท่า แต่ถ้าฉันเข้าใจถูกต้องแล้วมันมีปัญหาบางอย่าง 1. หากเด็กเริ่มระบบใหม่จะได้รับที่อยู่ IP ใหม่ จากนั้นผู้ปกครองทั้งหมดของเด็กคนนั้นจะต้องเริ่มต้นใหม่ด้วยเพื่อรับ varilabes สภาพแวดล้อมใหม่ 2. ฉันต้องเพิ่มตรรกะในแอปพลิเคชันของฉันเพื่ออ่านตัวแปรสภาพแวดล้อมเหล่านั้นเพื่อทำการเชื่อมต่อ
user3133475

คอนเทนเนอร์ที่รีสตาร์ท ( docker restart your_container) ควรเก็บที่อยู่ IP ไว้ เฉพาะในกรณีที่คุณเรียกใช้คอนเทนเนอร์ใหม่ตามภาพที่กำหนดจะได้รับ IP ใหม่ ( docker run -d image command)
อีเลียส Probst

2
ที่เคยเป็นจริง แต่อย่างน้อยเป็นของนักเทียบท่า 1.0 "นักเทียบท่ารีสตาร์ท" ให้ที่อยู่ IP คอนเทนเนอร์ใหม่ เพียงแค่กดปุ่มนี้ในสคริปต์บางตัวที่อาศัยพฤติกรรมก่อนหน้าของ IP ที่ไม่เปลี่ยนแปลง
jamshid

1
ในขณะที่ฉันคิดว่านี่อาจเป็นสิ่งที่ถูกต้องสำหรับ OP ที่จะทำฉันมาที่นี่เพื่อค้นหาคำตอบของคำถามตามที่วางไว้ เช่นวิธีการเชื่อมโยงไปยังบริการบนโฮสต์
mc0e

2

คำตอบของอีเลียสนั้นถูกต้อง แต่ลิงค์นั้นยาวและสับสน นี่เป็นบทสรุปง่ายๆ

ก่อนอื่นให้เรียกใช้คอนเทนเนอร์เพื่อเชื่อมโยงและตั้งชื่อ:

sudo docker run -d --name db training/postgres

จากนั้นเรียกใช้คอนเทนเนอร์อื่นเชื่อมโยงกับคอนเทนเนอร์แรก:

sudo docker run -d -P --name web --link db:db training/webapp python app.py

/etc/hostsการเชื่อมโยงจากภาชนะแรกที่ภาชนะที่สองจะใส่ลงใน ดังนั้นคุณสามารถใช้มันเหมือนชื่อโฮสต์ ตัวอย่างเช่น:

sudo docker run --name web --link db:db training/webapp ping db
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.