Ich entwickle einen Dienst und verwende dort Docker Compose, um Dienste wie Postgres, Redis, Elasticsearch zu spinnen. Ich habe eine Webanwendung, die auf RubyOnRails basiert und von all diesen Diensten schreibt und liest.
Hier ist mein docker-compose.yml
version: '2'
services:
redis:
image: redis:2.8
networks:
- frontapp
elasticsearch:
image: elasticsearch:2.2
networks:
- frontapp
postgres:
image: postgres:9.5
environment:
POSTGRES_USER: elephant
POSTGRES_PASSWORD: smarty_pants
POSTGRES_DB: elephant
volumes:
- /var/lib/postgresql/data
networks:
- frontapp
networks:
frontapp:
driver: bridge
Und ich kann Container innerhalb dieses Netzwerks pingen
$ docker-compose run redis /bin/bash
root@777501e06c03:/data# ping postgres
PING postgres (172.20.0.2): 56 data bytes
64 bytes from 172.20.0.2: icmp_seq=0 ttl=64 time=0.346 ms
64 bytes from 172.20.0.2: icmp_seq=1 ttl=64 time=0.047 ms
...
So weit, ist es gut. Jetzt möchte ich die Ruby on Rails-Anwendung auf meinem Host-Computer ausführen, aber auf die Postgres-Instanz mit einer URL zugreifen können, wie dies postgresql://username:password@postgres/database
derzeit nicht möglich ist
$ ping postgres
ping: unknown host postgres
Ich kann mein Netzwerk im Docker sehen
$ docker network ls
NETWORK ID NAME DRIVER
ac394b85ce09 bridge bridge
0189d7e86b33 elephant_default bridge
7e00c70bde3b elephant_frontapp bridge
a648554a72fa host host
4ad9f0f41b36 none null
Und ich kann eine Schnittstelle dazu sehen
$ ifconfig
br-0189d7e86b33 Link encap:Ethernet HWaddr 02:42:76:72:bb:c2
inet addr:172.18.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:76ff:fe72:bbc2/64 Scope:Link
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:36 errors:0 dropped:0 overruns:0 frame:0
TX packets:60 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:2000 (2.0 KB) TX bytes:8792 (8.7 KB)
br-7e00c70bde3b Link encap:Ethernet HWaddr 02:42:e7:d1:fe:29
inet addr:172.20.0.1 Bcast:0.0.0.0 Mask:255.255.0.0
inet6 addr: fe80::42:e7ff:fed1:fe29/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:1584 errors:0 dropped:0 overruns:0 frame:0
TX packets:1597 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:407137 (407.1 KB) TX bytes:292299 (292.2 KB)
...
Aber ich bin mir nicht sicher, was ich als nächstes tun soll. Ich habe versucht, ein bisschen damit zu spielen /etc/resolv.conf
, hauptsächlich mit nameserver
Direktiven, aber das hatte keine Wirkung.
Ich würde mich über Anregungen zur korrekten Konfiguration dieses Setups freuen.
AKTUALISIEREN
Nach dem Durchsuchen der Internetressourcen gelang es mir, Boxen statische IP-Adressen zuzuweisen. Im Moment reicht es mir, mich weiterzuentwickeln. Hier ist meine aktuelledocker-compose.yml
version: '2'
services:
redis:
image: redis:2.8
networks:
frontapp:
ipv4_address: 172.25.0.11
elasticsearch:
image: elasticsearch:2.2
networks:
frontapp:
ipv4_address: 172.25.0.12
postgres:
image: postgres:9.5
environment:
POSTGRES_USER: elephant
POSTGRES_PASSWORD: smarty_pants
POSTGRES_DB: elephant
volumes:
- /var/lib/postgresql/data
networks:
frontapp:
ipv4_address: 172.25.0.10
networks:
frontapp:
driver: bridge
ipam:
driver: default
config:
- subnet: 172.25.0.0/16
gateway: 172.25.0.1