[英]How do I expose my service to the internal docker network?
我正在运行一组这样的服务:
version: '2'
services:
web:
build: ./web
ports:
- "3000:3000"
links:
- api
api:
build: ./api
links:
- db
db:
image: postgres
我想将web
服务暴露给主机的网络接口,将主机上的端口 3000 绑定到容器上的端口 3000。 但是,我只想将api
服务公开给内部网络,这意味着我只希望 Web 服务可以访问它。 IIRC,这意味着我需要在 docker-compose 文件中将api
服务暴露给bridge
网络。
如果我正在运行--net bridge
-cli,我会通过指定--net bridge
参数来实现。 但我不确定如何在撰写文件中执行此操作。 请帮忙!
这里没有必要做任何特别的事情。 泊坞窗撰写自动创建一个私有网络给你,并配置名称解析,使得web
容器将能够击中端口x
的的api
在容器api:x
。
您需要为 api 服务创建一个单独的内部网络。 并将 api 服务附加到内部网络,同时将 Web 服务附加到桥接网络和内部网络。 您必须使用网络附加信息更新 docker-compose 文件。
我找到了一个版本 3 的例子:
version: '3'
services:
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 6
“链接”已经过时,它耦合容器,你最好定义一个桥接网络(实际上是 docker-compose 做的)。下面的例子:
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是桥接网络中的主机名。对于 web 容器可以通过主机名api访问 api。像这样:
btw,你最好在容器 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
// 容器 api-web 中的 nginx.conf,它连接到容器 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;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.