2015-01-23 3 views
2

Я не уверен, понимаю ли я концепцию порта докеров. Скажем, у меня есть приложение внутри контейнера, которое прослушивает порт 6000 для подключений tcp. Этот контейнер находится на сервере A.Как связать внутренний порт с внешним портом в докере?

Я хочу подключиться к приложению с другого сервера B. Но я хочу запустить несколько экземпляров одного и того же контейнера на сервере A, а внутренний порт должен оставаться 6000. Однако внешний порт должен изменение.

например

container 1 6000->9660 
container 2 6000->9661 
... 

Так из-за пределов применения следует подвергать 9660, 9661, ... Возможно ли это? Я пробовал с:

docker run -p 9660:6000 ... 

однако клиент не смог соединиться. Есть идеи?

+1

Если вам не нужно выставлять порт из контейнера A наружу, по какой-то причине вы должны использовать [связанные контейнеры] (https://docs.docker.com/userguide/dockerlinks/) вместо .. он более безопасен. Связывая контейнер Container B с контейнером A, он устанавливает переменные среды в контейнере B, указывающие на IP-адрес и порт в контейнере A. Затем вы используете эти vars в своем приложении. Таким образом, порты не подвергаются внешнему миру. – transistor1

+1

@ transistor1 +1 спасибо за информацию, однако в моем случае использования они должны быть открыты для внешнего мира. –

+0

Понял, моя ошибка ... Я прочитал ваш вопрос, чтобы обозначить, что вы связывали 2 контейнера вместе, но перечитывая его, на самом деле он говорит «сервер B», а не «контейнер» – transistor1

ответ

1

Я забыл

EXPOSE 6000 

внутри моей Dockerfile. Теперь это работает :)

Смежные вопросы