2014-07-25 7 views
15

uruchamiając następujące polecenie kończy się niepowodzeniem:Czy port dokera można przesłać do gniazda pliku uniksowego w kontenerze hosta?

sudo docker run -p unix:///tmp/file.sock:44444 -d image_name 

Czy coś nie tak z moim składni port forwarding lub jest konfiguracja jak to nie jest możliwe?

+0

Możesz mieć możliwość umieszczenia gniazda UNIX w woluminie, do którego host może uzyskać dostęp/zamontować do innego kontenera. Zalecam, abyś po prostu nasłuchiwał na porcie, a nie na gnieździe UNIX. –

+3

Pomysł polegał na zwiększeniu prędkości, ponieważ dzięki gniazdom unix byłbym w stanie uniknąć napięć sieciowych, które są nieodłączne w portach –

Odpowiedz

20

Docker za -p składnia nie weźmie gniazda unix:

-p=[]  : Publish a container᾿s port to the host (format: 
      ip:hostPort:containerPort | ip::containerPort | 
      hostPort:containerPort) 

Jednym rozwiązaniem byłoby:

  • Uruchom pojemnik bez wskazania -p będziemy go nazwać "cont1" (--name cont1)
  • Uruchom drugi pojemnik, który:
    • Bind mounts gniazdo UNIX (-v /tmp/file.sock:/tmp/file.sock), tak aby była dostępna z wnętrza pojemnika
    • Links do pierwszego zbiornika (--link cont1:cont1), aby być w stanie połączyć się z nim
    • Uruchamia narzędzia takiego jak socat przesyłanie ruchu z UNIX gniazdo do "cont1:4444" końcowym

nie jestem ekspertem socat, ale specyfikacja adres musisz powinna wyglądać następująco: UNIX-LISTEN:/tmp/file.sock,fork,reuseaddr TCP4:cont1:4444

+0

Co się stanie, jeśli gniazdo unix na hoście nie jest zmapowane na pliku, czyli abstrakcyjnym gniazdu przestrzeni nazw , takich jak (zgłoszone przez lsof): '' 'aesm_serv 26473 aesmd 6u unix 0xffff88021c494b00 0t0 291424 @sgx_aesm_socket_base type = STREAM''' –

1

Przyjęta odpowiedź jest częściowo poprawna, ponieważ można łączyć tylko katalogi, co oznacza, że ​​należy połączyć katalog gniazda zamiast samego gniazda.

Wykonałem to za mnie, gdy chciałem podłączyć gniazdo PostgreSQL.

docker run -p 5432:5432 -v /run/postgresql:/run/postgresql -d --name postgres postgres

Co to jest powiązanie postgres'owy gniazdo plik do systemu hosta.

+0

Nadal nie jest obsługiwany dla mac? https://github.com/docker/for-mac/issues/483 – holmberd

Powiązane problemy