Как сказал Иджаз Ахмад Хан. Вы должны использовать другой контейнер внутри этой сети в качестве прокси, например, nginx.
Если вы выставляете порты с docker-compose
на хост-компьютер (ваш компьютер), он виден только как локальный домен с указанным портом. Если вы запустите docker-compose.yml
так:
version: "3"
services:
service1:
image: something
name: service1_name
ports:
- "8081:80"
service2:
image: something
name: service2_name
ports:
- "8082:80"
Docker-compose создаст сеть по умолчанию, названную папкой в docker-compose.yml
с суффиксом _default
. В этой сети все контейнеры могут видеть друг друга. Команда expose
используется для контейнеров внутри этой сети (чтобы они могли видеть друг друга и общаться), port
используется для публикации на хост-машине (вашем компьютере).
Это значит:
service1 отображается на вашем компьютере как http://localhost:8081
для других контейнеров в сети как service1:80
.
service2 отображается на вашем компьютере как http://localhost:8082
для других контейнеров в сети как service2:80
.
Обратите внимание, что указанное имя контейнера не влияет на сетевой адрес службы. Чтобы проверить, что контейнеры видны только внутри сети, попробуйте пропинговать их из другого контейнера
docker run --rm --network=your_folder_name_default debian ping service1
Чтобы проверить, в какой сети работают ваши контейнеры, вы можете использовать inspect
docker inspect service1_name
Теперь вы должны использовать имя контейнера