Каждый контейнер Docker запускает отдельный процесс в изолированном сетевом пространстве имен, поэтому в этом нет необходимости. Выберите фиксированный порт. Для служб HTTP общие номера портов включают 80, 3000, 8000 и 8080, в зависимости от разрешений и времени выполнения языка (80 требует повышенных привилегий, 3000 по умолчанию для узла и т. Д.). Точный номер порта не имеет значения.
Вы получаете доступ к порту из-за пределов Docker пространства, используя опубликованный порт. Если вы используете несколько контейнеров, существует вероятность конфликта, если несколько служб используют один и тот же порт хоста, чего, вероятно, вы и пытаетесь избежать. В параметре docker run -p
или параметре Docker Compose ports:
можно перечислить только порт, работающий внутри контейнера, и Docker выберет порт хоста. для вас.
version: "3"
services:
web:
image: ...
ports:
- "8000" # no explicit host port
command: ... -Dserver.port=8000 # fixed container port
docker-compose port
web 8000
сообщит вам номер порта хоста (publi c). Для связи между контейнерами в одном и том же файле docker-compose.yml
вы можете использовать имя службы и (фиксированный, известный) внутренний порт http://web:8000
.