2017-06-08 3 views
0

Ich habe eine 2 Docker Container "Restorecms_Facade_1" (Fassade Service) und "Restorecms_identity_1" (Identity Service) auf der gleichen Brücke "Restorecms_default".Verbindung zwischen 2 Docker Container mit Docker komponieren

Ich habe die Hostnamen wie angegeben ‚Host-Name: Identität-SRV‘ für Identitäts-Service Bild in meinem Docker compose Datei

Die Fassade Service hat 5000 Häfen ausgesetzt und akzeptiert meine graphQL Anfrage. Dieser Frontend-Dienst delegiert die Anforderung an den Identitätsdienst (DNS-Name 'identity-srv'), der auf Port 50051 ausgeführt wird. Die Anforderung wird jedoch gerade für den Facade-Service ausgesetzt.

Meine Docker Container und Braut Netzwerkdetails sind unten.

Ich kann nicht einmal vom Fassadendienst zum Identitätsdienst pingen (aber andersherum ist möglich).

Fehle ich etwas hier oder muss ich etwas auf dem Fassadendienst hinzufügen, damit die Verbindung zum Identitätsdienst durchgeht?

Docker ps:

[email protected] /restore $ docker ps 
CONTAINER ID  IMAGE        COMMAND     CREATED    STATUS     PORTS            NAMES 
4a8854ce4876  xxx/facade-srv   "node lib/index.js"  41 minutes ago  Up 41 minutes    0.0.0.0:5000->5000/tcp        restorecms_facade_1 
00f1f00ae2a6  xxx/identity-srv  "node service.js"  41 minutes ago  Up 41 minutes (healthy) 0.0.0.0:50051->50051/tcp        restorecms_identity_1 

Docker inspizieren:

[email protected] /restore/identity-srv-TypeScript $ docker inspect restorecms_default 
[ 
    { 
     "Name": "restorecms_default", 
     "Id": "102358eab67884f7d39b78fd0bcf1050499d3dc667eddab5e15086633185837d", 
     "Created": "2017-06-08T10:40:59.672964582+02:00", 
     "Scope": "local", 
     "Driver": "bridge", 
     "EnableIPv6": false, 
     "IPAM": { 
      "Driver": "default", 
      "Options": null, 
      "Config": [ 
       { 
        "Subnet": "172.18.0.0/16", 
        "Gateway": "172.18.0.1" 
       } 
      ] 
     }, 
     "Internal": false, 
     "Attachable": true, 
     "Ingress": false, 
     "Containers": { 
      "00f1f00ae2a64f489a530a63a9fb57711618d5e67769b739db514b5f20b73d36": { 
       "Name": "restorecms_identity_1", 
       "EndpointID": "d005cdff65479817bf769e4b60a18769c40d9d9cae396f3c735c2e497d6e08a4", 
       "MacAddress": "02:42:ac:12:00:09", 
       "IPv4Address": "172.18.0.9/16", 
       "IPv6Address": "" 
      }, 
      "4a8854ce487698149072c224378f697e9309e32649f6010d2d8c4cc4f0bb3f42": { 
       "Name": "restorecms_facade_1", 
       "EndpointID": "2509c8e1444d27cbe8a3188412fcbfb1aab103ec2366c22f3ad614c684ef87ab", 
       "MacAddress": "02:42:ac:12:00:0a", 
       "IPv4Address": "172.18.0.10/16", 
       "IPv6Address": "" 
      } 
     }, 
     "Options": {}, 
     "Labels": { 
      "com.docker.compose.network": "default", 
      "com.docker.compose.project": "restorecms" 
     } 
    } 
] 

Host-Namen und ping:

[email protected]:/# cat /etc/hostname 
identity-srv 

[email protected]:/# ping 4a8854ce4876 
PING 4a8854ce4876 (172.18.0.10): 48 data bytes 
56 bytes from 172.18.0.10: icmp_seq=0 ttl=64 time=0.241 ms 
56 bytes from 172.18.0.10: icmp_seq=1 ttl=64 time=0.149 ms 
56 bytes from 172.18.0.10: icmp_seq=2 ttl=64 time=0.165 ms 
^C--- 4a8854ce4876 ping statistics --- 
3 packets transmitted, 3 packets received, 0% packet loss 
round-trip min/avg/max/stddev = 0.149/0.185/0.241/0.040 ms 


[email protected]:/# cat /etc/hostname 
4a8854ce4876 

[email protected]:/# ping identity-srv 
ping: unknown host 

Meine aktuelle Docker-compose.yml (für Identität und Fassade Service) Config sind unten:

identity: 
    hostname: identity-srv 
    image: xxx/identity-srv 
    ports: 
     - "50051:50051" 
    depends_on: 
     arangodb: 
     condition: service_healthy 
    links: 
     - arangodb 
     - kafka 
    healthcheck: 
     test: "exit 0" 

    # Facade service 
    facade: 
    image: xxx/facade-srv 
    ports: 
     - "5000:5000" 
    depends_on: 
     identity: 
     condition: service_healthy 
     #resource: 
     # condition: service_healthy 
    links: 
     - identity 
     - kafka 
     - elasticsearch 
     - arangodb 
     - redis 

Antwort

0

Hostname nur Hostname "innerhalb" des Containers. Wenn Sie es von einem anderen aus anpingen möchten, müssen Sie den Alias ​​(Standard zum Service-Namen) verwenden, den Sie in Ihrem links Abschnitt verwendet haben.

ping identity , wenn Sie verwenden möchten identity-srv Sie können auf diese Weise verwenden Links: ... links: - identity:identity-srv ...

+0

Danke, es hat funktioniert. – user2608576

1

links are legacy. Der moderne Weg ist seit Jahren, dass Sie die Version 2 oben in Ihrer Compose-Datei haben (die neueste Schema-Version ist 3.6, aber ich behalte sie für dieses Beispiel bei 2) und dann werden alle Container in einem benutzerdefinierten Brückennetzwerk immer behalten in DNS und voneinander in diesem Netzwerk zugänglich. Docker stellt jedem virtuellen Netzwerk einen privaten DNS-Server zur Verfügung und verwendet die hosts-Datei nicht mehr zur Namensauflösung von Containern im selben Andocknetzwerk.

Beachten Sie auch, dass Dienstnamen der Standard-DNS-Name sind. Daher ist es am einfachsten, sie gleich zu halten, damit Sie keinen expliziten Hostnamenschlüssel/-wert erhalten.

Dies sollte funktionieren. Sie werden in der Lage sein identity von facade und umgekehrt ping:

version: '2' 
services: 
    identity: 
    image: xxx/identity-srv 
    ports: 
     - "50051:50051" 
    depends_on: 
     arangodb: 
     condition: service_healthy 
    healthcheck: 
     test: "exit 0" 

    facade: 
    image: xxx/facade-srv 
    ports: 
     - "5000:5000" 
    depends_on: 
     identity: 
     condition: service_healthy 
Verwandte Themen