Tak więc musisz pomyśleć o tym, że kontenery Docker mają własny stos sieciowy (chyba że wyraźnie powiesz, aby udostępnić stos hosta za pomocą --net=host
). Oznacza to, że porty muszą być widoczne zarówno w kontenerze dokowania, jak i na zewnątrz (documentation) po podłączeniu do portów hosta. Porty ujawnione na kontenerze muszą być jawnie powiązane z portami hosta (z -p xxxx:yyyy
w komendzie docker run
) lub niejawnie (przy użyciu EXPOSE
w pliku Dockerfile i przy użyciu -P
w wierszu poleceń), tak jak mówi here. Jeśli plik Dockerfile nie zawiera EXPOSE 8008
lub nie podasz --expose 8008
w poleceniu docker run
, twój kontener nie będzie mógł rozmawiać ze światem zewnętrznym, , nawet jeśli użyjesz -p 8008:8008
w swoim poleceniu docker run
!
Tak, aby uzyskać TCP/8008 na komputerze połączonym z tcp/8008 na pojemniku, trzeba EXPOSE 8008
wewnątrz Dockerfile (i wtedy docker build
kontenera) OR --expose 8008
w swoim docker run command
. Ponadto należy albo użyć -P
do niejawnego lub -p 8008:8008
, aby jawnie połączyć ten odsłonięty port kontenera z portem hosta. Przykładem docker run
Polecenie to zrobić może wyglądać następująco:
docker run -it --expose 8008 -p 8008:8008 myContainer
Jest poręczny, aby pamiętać, że w opcji wiersza poleceń -p 8008:8008
kolejność tej operacji jest -p HOST_PORT:CONTAINER_PORT
. Nie zapomnij także, że nie będziesz mógł skorzystać z SSH w swoim kontenerze z innego komputera w Internecie, chyba że ten port zostanie odblokowany na iptables na hoście. Zawsze zapominam o tym i marnuję pół godziny, zanim pamiętam, że zapomniałem o iptables -A INPUT ...
dla tego konkretnego portu TCP na maszynie hosta. Ale powinieneś być w stanie SSH z hosta do kontenera bez reguły iptables, ponieważ używa pętli zwrotnej dla połączeń lokalnych. Powodzenia!
Mówi się, że adres jest już używany?Chcę localhost: 8008 na moim kontenerze do przekazania do localhost: 8008 na hoście – Setheron
Może coś jest już nasłuchuje na porcie '8008' na twoim hoście. Możesz sprawdzić, wpisując 'netstat -tlnp', jeśli host jest hostem Linux. Jeśli jest coś, co już nasłuchuje na porcie '8008' na twoim hoście, będziesz musiał go najpierw zatrzymać. –