Как подключиться к локальной машине изнутри контейнера Docker, созданного Docker-compose? - PullRequest
0 голосов
/ 27 апреля 2018

У меня есть докер-контейнер, который был создан с помощью docker-compose. Вот файл yml.

version: "3"
services:
  redis:
    image: "redis"
  web:
    image: "myimage"
    ports:
      - "8000:8000"
    environment:
      REDIS_HOST: redis
    volumes:
      - .:/usr/src/app
    depends_on:
      - "redis"
    command: ["npm", "start"]

Из этого контейнера мое веб-приложение должно подключаться к локальному компьютеру, поскольку на моем локальном компьютере запущено другое веб-приложение, к которому требуется доступ к веб-приложению моего док-контейнера. Как мне это сделать? Веб-приложение localhost размещено на другом порту (7777).

Я уже видел Изнутри контейнера Docker, как я могу подключиться к локальному хосту машины? , и я заставил его работать, используя опцию "extra_hosts", но я хочу знать, если есть другой способ сделать это?

1 Ответ

0 голосов
/ 27 апреля 2018

Docker compose - это просто утилита для запуска нескольких Docker-контейнеров. Таким образом, почти все, что относится к запуску контейнера с использованием docker run, одинаково для контейнеров, начинающихся с docker-compose.

В частности, поскольку вы находитесь на MAC, внутри контейнера есть специальное DNS-имя, которое разрешено для хост-машины.

В зависимости от версии докера, имеющейся у вас DNS может немного отличаться.

Для Docker 18.03 и выше вы можете использовать host.docker.internal

Для и выше Docker 17.06 используйте docker.for.mac.host.internal

ниже 17,06 docker.for.mac.localhost

Таким образом, вы можете подключиться к веб-приложению на машине, используя <dns-name>:7777

UPDATE:

Чтобы избежать жесткого кодирования значения в коде, передайте это DNS-имя в качестве переменной env контейнеру.

environment:
    REDIS_HOST: redis
    WEB_APP: host.docker.internal

В приложении извлеките переменную окружения WEB_APP и используйте ее для подключения

...