2017-12-28 18 views
1

ich eine Gruppe von Diensten wie folgt ausgeführt werden:Wie stelle ich meinen Dienst dem internen Andocknetzwerk zur Verfügung?

version: '2' 
services: 
    web: 
    build: ./web 
    ports: 
     - "3000:3000" 
    links: 
     - api 
    api: 
    build: ./api 
    links: 
     - db 
    db: 
    image: postgres 

ich den web Dienst an den Host-Netzwerk-Schnittstelle, die Bindung Port 3000 auf dem Host-Port 3000 auf dem Behälter verfügbar machen möchten. ABER, ich möchte nur den api Dienst dem internen Netzwerk zugänglich machen, was bedeutet, dass ich nur möchte, dass er vom Webservice erreichbar ist. IIRC, das bedeutet, ich muss den api-Dienst dem bridge-Netzwerk in der Docker-Compose-Datei verfügbar machen.

Wenn ich den Docker-CLI ausgeführt würde, würde ich dies tun, indem Sie das --net bridge Argument angeben. Aber ich bin nicht sicher, wie man das in einer Compose-Datei macht. Bitte helfen Sie!

+1

Es ist eine Weile her, seit ich Docker verwendet habe Compose, aber es sieht für mich so aus, als müsste das schon tun, was du willst - aus der Perspektive des 'web'-Containers sollte der Hostname' api' auf die IP-Adresse des 'api'-Containers im privaten Netzwerk auflösen. –

+0

weist das Docker-Netzwerk einen dynamischen Port zu? – dopatraman

+0

Es müssen keine Ports zugewiesen werden. Wenn Sie etwas haben, das auf Port "n" innerhalb des "api" Containers abhört, dann kann der 'web' Container über' api: n' mit ihm verbunden werden. –

Antwort

-1

Sie müssen ein separates internes Netzwerk für den API-Dienst erstellen. Und schließen Sie den api-Dienst an das interne Netzwerk an, während Sie den Webdienst sowohl an das Brückennetzwerk als auch an das interne Netzwerk anschließen. Sie müssen die Docker-Compose-Datei mit den Netzwerkanhangsinformationen aktualisieren.

fand ich eine Version 3 Beispiel:

version: '3' 
services: 
    worker: 
    image: dockersamples/examplevotingapp_worker 
    networks: 
    - frontend 
    - backend 
    deploy: 
    mode: replicated 
    replicas: 6 
+1

Hier muss kein Netzwerk explizit erstellt werden. –

1

Es gibt keine Notwendigkeit, etwas zu tun, hier speziell ist. Docker Compose automatically creates a private network für Sie und konfiguriert die Namensauflösung so, dass der web Container Port x des api Container bei api:x schlagen kann.

0

"Link" ist veraltet und es Paare Container, Sie sollten besser ein Brückennetzwerk statt (eigentlich Andockfenster-compose tut es) .Der folgendes Beispiel definiert werden:

version: '2' services: web: build: ./web ports: - 3000:3000 container_name: web api: build: ./api container_name: api db: image: postgres container_name: db

conatiner_name in der Brücke ist der Hostname network.For der Webcontainer api von Hostnamen api .like diese zugreifen kann:

http://api

btw, sollten Sie besser Mengen im Container db montieren ~

Sie eines meiner Projekt als Beispiel:

// Docker-compsoe.yml version: "2" services: web: build: context: ./web dockerfile: Dockerfile container_name: api-web working_dir: /etc/nginx/ tty: true stdin_open: true ports: - 2017:2017 depends_on: - server server: build: context: ./server dockerfile: Dockerfile container_name: api-server working_dir: /app tty: true stdin_open: true ports: - 2018:2018 depends_on: - db db: image: mongo:3 container_name: api-db tty: true stdin_open: true volumes: - ./data:/data ports: - 27001:27017

// nginx.conf in Container api-web, es verbindet sich mit Container api-server

gzip on; 
gzip_min_length 1k; 
gzip_buffers 16 64k; 
gzip_http_version 1.1; 
gzip_comp_level 9; 
gzip_types application/javascript text/plain application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png; 
gzip_vary on; 

server { 
    listen 2017; 
    root /usr/share/nginx/html; 
    index index.html; 
    location /api { 
    proxy_pass http://api-server:2018; 
    } 
    location/{ 
    try_files $uri $uri/ /index.html; 
    } 
Verwandte Themen