Как увидеть связанный контейнер как 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
), но это кажется бессмысленным и хрупким.