docker compose documentation指定不推荐使用links
,应将其替换为depends_on
。我无法确切地知道如何。
以下是具有3项服务的应用程序的工作docker-compose文件(带有links
指令):
version: "3.1"
services:
nginx:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./php/content:/srv/www/content
- ./static:/srv/www/static
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
links:
- php:php-app
- nodejs:nodejs-app
nodejs:
image: node:alpine
environment:
NODE_ENV: production
working_dir: /home/app
restart: always
volumes:
- ./nodejs:/home/app
links:
- php:php-app
command: ["node", "index"]
php:
image: php:apache
volumes:
- ./php:/var/www/html
相关的nginx default.conf
:
server {
listen 80;
root /srv/www;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
location / {
try_files $uri @nodejs;
}
location /api {
rewrite ^([^.\?]*[^/])$ $1/ break;
proxy_pass http://php-app:80;
}
location @nodejs {
proxy_pass http://nodejs-app:8080;
}
}
links
指令将docker服务名称中的别名设为nginx conf中的proxy_pass
名称。
如何在不修改nginx配置(并保留别名)的情况下,用links
替换docker-compose文件中的depends_on
指令?
答案 0 :(得分:5)
docker撰写文档指定不推荐
links
,应替换为depends_on
。
没有。文档只说,
links
也以与depends_on
相同的方式表达服务之间的依赖关系,因此它们决定了服务启动的顺序。
我看不出这是如何结束的,您应该使用depends_on
代替links
。相反,它说,如果你需要在另一个容器中运行容器,你应该使用depends_on
,而不是links
。 (例如,您command
- 在php
容器中指定正在运行的迁移,并且需要等待postgres
容器。)
另一方面,links
有一个警告说
除非您绝对需要继续使用它,否则我们建议您使用用户定义的网络来促进两个容器之间的通信,而不是使用
--link
。
在此上下文中,--link
cli的docker
与links
中的docker-compose.yml
相同。
现在,到目前为止,如果您的容器在一个网络上,则不需要任何进一步的特殊规范。除非您另行指定,否则默认网络驱动程序为bridge
。因此,如果您将docker-compose.yml
指定为以下内容,则应将所有容器放在一个网络上,并自动相互了解。
version: "3.1"
services:
nginx:
image: nginx:alpine
ports:
- "8000:80"
volumes:
- ./php/content:/srv/www/content
- ./static:/srv/www/static
- ./nginx/default.conf:/etc/nginx/conf.d/default.conf
nodejs:
image: node:alpine
environment:
NODE_ENV: production
working_dir: /home/app
restart: always
volumes:
- ./nodejs:/home/app
command: ["node", "index"]
php:
image: php:apache
volumes:
- ./php:/var/www/html
在这种情况下,nginx
应与
location / {
try_files $uri nodejs;
}
和
location /api {
rewrite ^([^.\?]*[^/])$ $1/ break;
proxy_pass http://php:80;
}