首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何向内部docker网络公开我的服务?

如何向内部docker网络公开我的服务?
EN

Stack Overflow用户
提问于 2017-12-29 04:45:24
回答 3查看 1.2K关注 0票数 1

我正在运行一组这样的服务:

代码语言:javascript
复制
version: '2'
services:
  web:
    build: ./web
    ports: 
      - "3000:3000"
    links:
      - api
  api:
    build: ./api
    links:
      - db
  db:
    image: postgres

我希望将web服务公开给主机的网络接口,将主机上的端口3000绑定到容器上的端口3000。但是,我只想将api服务公开给内部网络,这意味着我只希望web服务可以访问它。这意味着我需要在docker-compose文件中向bridge网络公开api服务。

如果我正在运行docker-cli,我会通过指定--net bridge参数来实现。但是我不确定如何在compose文件中做到这一点。请帮帮我!

EN

回答 3

Stack Overflow用户

发布于 2017-12-29 23:30:56

这里不需要做任何特殊的事情。Docker为您编写automatically creates a private network,并配置名称解析,使web容器能够在api:x命中api容器的x端口。

票数 1
EN

Stack Overflow用户

发布于 2017-12-29 09:33:52

您需要为api服务创建一个单独的内部网络。并将api服务附加到内部网络,同时将web服务附加到桥接网络和内部网络两者。您必须使用网络连接信息更新docker-compose文件。

我找到了一个版本3的例子:

代码语言:javascript
复制
version: '3'
services:
  worker:
  image: dockersamples/examplevotingapp_worker
  networks:
    - frontend
    - backend
  deploy:
    mode: replicated
    replicas: 6
票数 0
EN

Stack Overflow用户

发布于 2017-12-30 10:58:27

“链接”是过时的,它耦合容器,你最好改为定义一个桥接网络(实际上是docker-compose做的).The如下示例:

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是网桥network.For中的主机名,web容器可以通过主机名 api .like访问api,如下所示:

顺便说一下,你最好在容器db~中挂载卷。

以我的一个项目为例:

// 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在容器api-web中,连接容器api-server

代码语言:javascript
复制
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;
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48014148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档