Мне удалось сделать это с traefik.Я добавил службу:
traefik:
image: traefik:alpine
ports:
- 8000:80
volumes:
- ./docker/traefik:/etc/traefik
- /var/run/docker.sock:/var/run/docker.sock
networks:
- my-network
restart: always
Мой ./docker/traefik.toml:
defaultEntryPoints = ["http"]
[entryPoints]
[entryPoints.http]
address = ":80"
[docker]
watch = true
endpoint = "unix:///var/run/docker.sock"
exposedByDefault = false
debug = true
Я изменил контейнер app-dev, поэтому apache обслуживает API на порту 8000. В compose, ядобавили следующие строки в app-dev:
labels:
- "traefik.enable=true"
- "traefik.docker.network=my-network"
- "traefik.port=8000"
- "traefik.frontend.rule=Host:app-dev"
Я также добавил app-dev в / etc / hosts, он указывает на 127.0.0.1.Поэтому, когда я ввожу app-dev: 8000 в своем браузере (или когда клиент вызывает его), traefik перенаправляет меня на порт 8000 в контейнере app-dev.Когда я вызываю API на сервере, он также вызывает app-dev: 8000 и указывает непосредственно на контейнер, как и раньше.Таким образом, и клиент, и сервер используют один и тот же адрес.