Как увидеть связанный контейнер как localhost?

У меня есть два контейнера:

api:
  image: social-learning
  ports:
    - "3000:3000"
  command: bundle exec rails s -p 3000 -b '0.0.0.0'
  volumes:
    - ../api:/app
  expose:
    - "3000"
web:
  image: social-learning-frontend
  ports:
    - "4200:4200"
    - "9000:9000"
  command: ember serve -p 4200
  volumes:
    - .:/app
  links:
    - api
  expose:
    - "3000"

Когда я это сделаю:

docker exec `docker ps -a | grep 'frontend_web_1' | awk '{print $1 }'` curl http://localhost:3000

Я всегда отказываюсь от связи. Я могу получить доступ к другому контейнеру через его IP-адрес, но я предпочитаю использовать его, поскольку он является локальным.

Возможно ли это?

Ответ 1

Кажется, здесь какая-то путаница.

Похоже, вы пытаетесь войти в веб-контейнер и получить доступ к контейнеру api, используя адрес localhost? Это не сработает.

Лучшее решение - просто использовать указанную ссылку; в веб-контейнере вы сможете сделать curl http://api:3000. Это работает, потому что Docker добавил запись в /etc/hosts для контейнера api для вас.

Доступ через localhost будет работать только с хоста Docker, где публикуются порты контейнера. Я предполагаю, что вы можете получить доступ к хосту Docker из контейнера через мост Docker (например, curl 172.17.42.1:3000), но это кажется бессмысленным и хрупким.