Как создать соединение через веб-сокет между двумя контейнерами Docker - PullRequest
0 голосов
/ 04 июля 2019

У меня есть два контейнера Docker, которые должны иметь соединение веб-сокетов между ними.

Я запускаю один контейнер так:

docker run --name comm -p 8080:8080 comm_module:latest

чтобы открыть порт 8080 для хоста. Затем я пытаюсь запустить второй контейнер следующим образом:

docker run --name test -p 8080:8080 datalogger:latest

Тем не менее, я получаю ошибку ниже:

docker: Ошибка ответа от демона: не удалось запрограммировать драйвер, внешний подключение в тесте конечной точки (F06588ee059e2c4be981e3676d7e05b374b42a8491f9f45be27da55248189556): Не удалось выполнить привязку для 0.0.0.0:8080: порт уже выделен. ERRO [0000] ошибка при ожидании контейнера: контекст отменен

Я не уверен, что делать. Должен ли я подключить их к сети? Как мне запустить эти контейнеры?

Ответы [ 3 ]

2 голосов
/ 04 июля 2019

вы не можете связать один и тот же порт хоста дважды в одно и то же время, вы можете изменить один из портов в одном контейнере:

 docker run --name comm -p 8080:8080 comm_module:latest
 docker run --name test -p 8081:8080 datalogger:latest

вы можете проверить конфигурацию в контейнерах на предмет их связи.

Вы также можете создать ссылку между ними:

docker run --name test -p 8081:8080 --link comm datalogger:latest
0 голосов
/ 05 июля 2019

Мое решение работает нормально.

docker network create mynet  
docker run -p 443:443 --net=mynet --ip=172.18.0.3 --hostname=frontend.foobar.com foobarfrontend
docker run -p 9999:9999 --net=mynet --ip=172.18.0.2 --hostname=backend.foobar.com foobarbackend

route /P add 172.18.0.0 MASK 255.255.0.0 10.0.75.2

foobarfrontend вызывает веб-сокет wss на foobarbackend на порту 9999 PS: я работаю на Docker Windows 10 с Linux-контейнеры веселиться

0 голосов
/ 04 июля 2019

Я наконец-то решил это.Это шаги, необходимые для двусторонней связи через веб-сокет между двумя контейнерами Docker:

  1. Измените исходный код в контейнерах, чтобы использовать имя другого контейнера в качестве адреса хоста назначения ('comm' внутри 'test' и наоборот) + номер порта.

  2. Откройте один и тот же порт (8080) в файлах Docker двух контейнеров и создайте образы.Не нужно публиковать их, так как они будут видны другим контейнерам в сети.

  3. Создайте пользовательскую мостовую сеть, например:

    docker network create my-net

  4. Создайте мой первый контейнер и подключите его к сети:

    docker create --name comm --network my-net comm_module: последний

  5. Создайте мой второй контейнер и подключите его к сети:

    docker create - name test --network my-net datalogger: последний

  6. Запустите оба контейнера, введя команду запуска docker.

И двусторонняя связь через веб-сокет прекрасно работает!

...