2017-12-28 60 views
1

나는 다음과 같은 서비스의 그룹을 실행 해요 :서비스를 내부 도커 네트워크에 노출하려면 어떻게해야합니까?

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

내가 호스트의 네트워크 인터페이스에 web 서비스를 노출 할 컨테이너의 포트 3000 호스트에 포트 3000을 바인딩. 하지만, 내부 네트워크에만 api 서비스를 공개하고 싶습니다. 즉, 웹 서비스에서만 연결할 수 있기를 원합니다. IIRC는 도커 작성 파일의 서비스를 bridge 네트워크에 노출해야 함을 의미합니다.

docker-cli를 실행중인 경우 --net bridge 인수를 지정하면됩니다. 하지만 작성 파일에서이 작업을 수행하는 방법을 잘 모르겠습니다. 도와주세요!

+1

Docker를 사용한 이후로 꽤 오래되었습니다. 작성하고 싶지만 이미 원하는대로해야하는 것처럼 보입니다. 웹 컨테이너의 관점에서, 호스트 이름'api'는 사설 네트워크의'api' 컨테이너의 IP 주소로 해석되어야합니다. –

+0

도커 네트워크가 동적 포트를 할당합니까? – dopatraman

+0

포트를 할당 할 필요가 없습니다. 만약 당신이'api' 컨테이너 안에 포트 n을 듣고 있다면,'web' 컨테이너는'api : n'을 통해 그 컨테이너에 연결할 수 있습니다. –

답변

-1

api 서비스를 위해 별도의 내부 네트워크를 만들어야합니다. 또한 웹 서비스를 브리지 네트워크와 내부 네트워크에 모두 연결하는 동안 내부 네트워크에 API 서비스를 연결합니다. 네트워크 부착 정보로 도커 작성 파일을 업데이트해야합니다.

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

여기에 명시 적으로 네트워크를 만들 필요가 없습니다. –

1

여기에 특별한 일을 할 필요가 없습니다 :

나는 버전 3 예를 발견했다. Docker automatically creates a private network을 작성하고 web 컨테이너의 xapi 컨테이너의 포트 api:x에 도달 할 수 있도록 이름 확인을 구성합니다.

0

국지적 인 다음의 예 "링크"은 구식이며 커플 용기, 당신은 더 나은 (고정 표시기-작성이 그것을하지 실제로) 대신 다리 네트워크를 정의하는 것 :

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

: 웹 컨테이너이 .like 호스트 이름 API를에 의해 API에 액세스 할 수 있습니다 network.For 다리의 호스트 이름입니다

BTW, 당신은 더 나은 컨테이너 dB ~에 볼륨을 마운트 것

당신에게 예를 들어 내 프로젝트 중 하나를 보내기

// 고정 표시기 - 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는 컨테이너 api-web에서 컨테이너 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; 
    }