Вопрос начинающего докера,
Итак, у меня есть среда разработки, в которой я запускаю модульное приложение, оно работает с помощью Docker Compose для запуска 3 контейнеров: сервера, клиента, базы данных.
docker-compose.yml
выглядит следующим образом:
#############################
# Server
#############################
server:
container_name: server
domainname: server.dev
hostname: server
build: ./server
working_dir: /app
ports:
- "3000:3000"
volumes:
- ./server:/app
links:
- database
#############################
# Client
#############################
client:
container_name: client
domainname: client.dev
hostname: client
image: php:5.6-apache
ports:
- "80:80"
volumes:
- ./client:/var/www/html
#############################
# Database
#############################
database:
container_name: database
domainname: database.dev
hostname: database
image: postgres:9.4
restart: always
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=root
- POSTGRES_DB=dbdev
- PG_TRUST_LOCALNET=true
ports:
- "5432:5432"
volumes:
- ./database/scripts:/docker-entrypoint-initdb.d # init scripts
Вы можете видеть, что я назначаю имя домена .dev для каждого из них, это прекрасно работает, чтобы увидеть один компьютер из другого (внутренняя сеть Docker), например, здесь я пинговаю server.dev
из client.dev
CLI:
[email protected]:/var/www/html# ping server.dev
PING server.dev (127.0.53.53): 56 data bytes
64 bytes from 127.0.53.53: icmp_seq=0 ttl=64 time=0.036 ms
Это работает отлично, но не в моей сети хост-системы.
Для удобства я хотел бы назначить домены в МОЙ локальной сети, а не в сети контейнеров Docker, чтобы я мог, например, набрать: client.dev на моем URL-адрес браузера и загрузить контейнер Docker.
Прямо сейчас, я могу получить доступ только, если я использую Docker IP, который является динамическим:
client: 192.168.99.100:80
server: 192.168.99.100:3000
database: 192.168.99.100:5432
Есть ли автоматизированный/удобный способ сделать это, что не предполагает, что я вручную добавляю IP-адрес в файл /etc/hosts?
BTW Я на OSX, если это имеет какое-то значение.
Спасибо!
Изменить: Я нашел эту проблему Github, которая кажется связанной: https://github.com/docker/docker/issues/2335
Насколько я понял, они, похоже, говорят, что это то, что недоступно вне коробки, и предлагают такие внешние инструменты, как:
- https://github.com/jpetazzo/pipework
- https://github.com/bnfinet/docker-dns
- https://github.com/gliderlabs/resolvable
Это правильно? И если да, то какой из них я должен использовать в своем конкретном сценарии?