Учитывая, что вы запустили standalone_service
как --network host
, он неотличим от любого другого процесса, выполняющегося на хосте, и от различных ответов на Изнутри контейнера Docker, как мне подключиться к [хост] машина должна работать на вас.
Вторым предпочтительным подходом может быть создание сети Docker вне Docker Compose и присоединение другого контейнера к этой сети
docker network create container_network
docker run --net container_network -p 8888:8888 --name standalone_service ...
Как только вы это сделаете, вы можете объявить ту же сеть в вашем docker-compose.yml
, что и внешнюю сеть .Вы можете даже сделать это default
сетью , чтобы вам не приходилось вручную настраивать другие службы для ее использования.
version: 3
services:
myapp1:
build: .
ports: ['3000:3000']
environment:
MYAPP2_URL: 'http://myapp2/'
STANDALONE_URL: 'http://standalone_service/'
# gets `command:` from the Dockerfile
# attaches to the `default` network
networks:
default:
external: true
name: container_network
Вы также можете "одолжить"* по умолчанию default
сеть, которую создает Docker Compose, если вы не возражаете начинать вещи в обратном порядке и в зависимости от деталей реализации.
docker-compose up -d
docker run --net dirname_default -p 8888:8888 --name standalone_service ...
Не существует такой вещи, как "подключение к внешней локальной сети"».Каждая сетевая среда (хост и отдельно каждый контейнер) имеет свою собственную "локальную сеть" 127.0.0.0/8;localhost
привязан к IP-адресу 127.0.0.1, и это всегда означает «я»;в контексте Docker, «в частности, контейнер, из которого я звоню».