Подключиться к хост-сокету из док-контейнера - PullRequest
1 голос
/ 20 июня 2019

У меня есть следующий контейнер докера

FROM ubuntu:16.04
RUN apt-get update && apt-get install -y curl net-tools netcat nmap
CMD /bin/bash

Я запускаю его с томом /tmp сопоставленным

На хосте я создал сокет внутри /tmp.Я проверил с ncat, и соединение работает с хоста.Тем не менее, он не работает из контейнера Docker.

ncat -U /tmp/uwsgi.sock
Ncat: Connection refused.

Как мне этого добиться?

Разрешения:

$ ls -al /tmp/uwsgi.sock
srwxrwxrwx  1 user  wheel  0 Jun 19 23:53 /tmp/uwsgi.sock

1 Ответ

1 голос
/ 20 июня 2019

Ncat: Connection refused. означает, что одноранговая сторона закрыла соединение, поэтому вы в контейнере не можете с ним связаться.

Один пример для вас:

часть узла докера:

shubuntu1@shubuntu1:~$ ncat -lU /tmp/test.sock
hello
world

команда для запуска контейнера с другим сеансом SSH:

shubuntu1@shubuntu1:~$ docker run -it -v /tmp:/tmp ubuntu /bin/bash

контейнерная часть:

root@01f724409cec:/# apt-get update && apt-get install -y curl net-tools netcat nmap
root@01f724409cec:/# ncat -U /tmp/test.sock
hello
world

Вы можете видеть на любой стороне, когда вы вводите hello, world, другая сторона может видеть это тоже.

Но если закрыть сокет unix на стороне хоста докера:

shubuntu1@shubuntu1:~$ ncat -lU /tmp/test.sock
hello
world
^C
shubuntu1@shubuntu1:~$

Затем снова подключите его на стороне контейнера:

root@01f724409cec:/# ncat -U /tmp/test.sock
hello
world
^C
root@01f724409cec:/# ncat -U /tmp/test.sock
Ncat: Connection refused.

Покажет Connection refuesd.

...