Mam konfigurację, w której prowadzę wszystkie części mojej witryny w kontenerach dokerów. Mój nginx, który nasłuchuje na portach 80 i 443, działa w kontenerze.
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
Chcę skonfigurować serwer proxy do usługi w innym kontenerze. Ten kontener jest powiązany z portem 3000 na hoście:
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
Moje iptables na hoście dokera wyglądają tak:
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
Z poziomu kontenera nie jestem w stanie połączyć się z portem 3000 na hoście z powodu konfiguracji iptables.
Nie chcę otwierać portu 3000 na publicznym Internecie.
Czy istnieje sposób otwarcia bezpośredniego mostu między kontenerem a hostem na porcie 3000?
Czy powinienem zmodyfikować moje iptables, aby akceptować je z zakresu IP dokerów?
źródło
docker restart your_container
) powinien zachować swój adres IP. Tylko jeśli uruchomisz nowy kontener na podstawie danego obrazu, otrzyma on nowy adres IP (docker run -d image command
).Odpowiedź Eliasa jest poprawna, ale link jest długi i mylący. Oto proste podsumowanie:
Najpierw uruchom kontener, aby połączyć i nazwij go:
Następnie uruchom drugi kontener, łącząc go z pierwszym kontenerem:
Łącze z pierwszego pojemnika do drugiego pojemnika jest wstawiane
/etc/hosts
. Możesz więc używać go jak nazwy hosta. Na przykład:źródło