Jér*_*eau 5 nginx docker docker-compose docker-swarm
我正在尝试使用 docker 部署堆栈。
这是我的堆栈的工作原理:
这是我的 docker-compose.yml:
version: '3.2'
services:
website:
container_name: nyl2pronos-website
image: nyl2pronos-website
restart: always
build:
context: nyl2pronos_webapp
dockerfile: Dockerfile
volumes:
- ./logs/nginx-website:/var/log/nginx
expose:
- "80"
deploy:
replicas: 10
update_config:
parallelism: 5
delay: 10s
api:
container_name: nyl2pronos-api
build:
context: nyl2pronos_api
dockerfile: Dockerfile
image: nyl2pronos-api
restart: always
ports:
- 8001:80
expose:
- "80"
depends_on:
- db
- memcached
environment:
- DJANGO_PRODUCTION=1
volumes:
- ./data/api/uploads:/code/uploads
- ./data/api/static:/code/static
nginx-api:
image: nginx:latest
container_name: nyl2pronos-nginx-api
restart: always
expose:
- "80"
volumes:
- ./data/api/uploads:/uploads
- ./data/api/static:/static
- ./nyl2pronos_api/config:/etc/nginx/conf.d
- ./logs/nginx-api:/var/log/nginx
depends_on:
- api
nginx-proxy:
image: nginx:latest
container_name: nyl2pronos-proxy
restart: always
ports:
- 80:80
- 443:443
volumes:
- ./proxy:/etc/nginx/conf.d
- /etc/letsencrypt:/etc/letsencrypt
- ./logs/nginx-proxy:/var/log/nginx
deploy:
placement:
constraints: [node.role == manager]
depends_on:
- nginx-api
- website
Run Code Online (Sandbox Code Playgroud)
当我使用docker-compose up 时一切正常。但是当我尝试使用 docker stack deploy --compose-file=docker-compose.yml prod进行部署时。我的 nginx 配置文件找不到不同的上游。
这是我的服务nginx-api提供的错误:
2019/03/23 17:32:41 [emerg] 1#1: host not found in upstream "api" in /etc/nginx/conf.d/nginx.conf:2
Run Code Online (Sandbox Code Playgroud)
见下面我的nginx.conf:
upstream docker-api {
server api;
}
server {
listen 80;
server_name xxxxxxxxxxxxxx;
location /static {
autoindex on;
alias /static/;
}
location /uploads {
autoindex on;
alias /uploads/;
}
location / {
proxy_pass http://docker-api;
proxy_redirect off;
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-Host $server_name;
}
}
Run Code Online (Sandbox Code Playgroud)
如果您发现我的配置有问题或我可以做得更好,请告诉我!
发生这种情况是因为nginx-api服务先于服务启动api。
但我添加了depends_on选项?
你是对的,这个选项应该适用于一个docker-compose up案例。但不幸的是,不是在docker stack deploy, 或者 上,正如文档所说:
使用版本 3 Compose 文件以 swarm 模式部署堆栈时,将忽略 dependent_on 选项。
好的,那我现在能做什么呢?
没有什么。它实际上不是一个错误-
docker swarm 节点(您的堆栈服务)应该在出现错误时自动恢复。(这就是您定义该restart: always选项的原因)。所以无论如何它应该对你有用。
如果您仅使用 compose 文件来部署堆栈而不是docker-compose up- 您可以完全删除该depends_on选项,这对 docker stack 没有任何意义。
| 归档时间: |
|
| 查看次数: |
1231 次 |
| 最近记录: |