我正在运行这样一组服务:
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,这意味着我需要将api
服务公开给docker-compose文件中的bridge
网络。
如果我正在运行docker-cli,我会通过指定--net bridge
参数来执行此操作。但我不知道如何在撰写文件中这样做。请帮忙!
答案 0 :(得分:1)
这里没有必要做任何特别的事情。 Docker为您撰写automatically creates a private network,并配置名称解析,以便web
容器能够在x
处点击api
容器的api:x
端口。< / p>
答案 1 :(得分:0)
您需要为api服务创建单独的内部网络。并将api服务附加到内部网络,同时将Web服务连接到桥接网络和内部网络。您必须使用网络附加信息更新docker-compose文件。
我找到了第3版的例子:
version: '3'
services:
worker:
image: dockersamples/examplevotingapp_worker
networks:
- frontend
- backend
deploy:
mode: replicated
replicas: 6
答案 2 :(得分:0)
&#34;链接&#34; 已过时并且它与容器耦合,您最好定义一个桥接网络(实际上是docker-compose)。以下示例:< / p>
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。像这样:
<强> http://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-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;
}