【发布时间】:2015-08-18 15:07:17
【问题描述】:
我在负载均衡器后面滚动部署 docker 容器时遇到问题。
这是我的 docker compose yml 文件内容。
nginx:
image: nginx_image
links:
- node1:node1
- node2:node2
- node3:node3
ports:
- "80:80"
node1:
image: nodeapi_image
ports:
- "8001"
node2:
image: nodeapi_image
ports:
- "8001"
node3:
image: nodeapi_image
ports:
- "8001"
这里是我的nginx.conf
worker_processes 4;
events { worker_connections 1024; }
http {
upstream node-app {
least_conn;
server node1:8001 weight=10 max_fails=3 fail_timeout=30s;
server node2:8001 weight=10 max_fails=3 fail_timeout=30s;
server node3:8001 weight=10 max_fails=3 fail_timeout=30s;
}
server {
listen 80;
listen 443 ssl;
# ssl on;
ssl_certificate /etc/nginx/ssl/imago.io.chain.crt;
ssl_certificate_key /etc/nginx/ssl/imago.io.key;
location / {
proxy_pass http://node-app;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
proxy_set_header Host $host;
proxy_cache_bypass $http_upgrade;
}
}
}
如果我要部署一个新构建的映像,我必须停止一个节点容器,将其删除并使用新映像重新创建它。这里的问题是新容器将获得一个新 IP,而 nginx 容器不知道该新 IP,因此,如果我在重新创建最后一个容器后重新创建负载均衡器后面的 3 个容器,则应用程序将不再提供服务,因为所有 IP在 nginx 机器中 /etc/hosts 和环境变量不再是最新的。
我可以通过 SSH 连接到每个容器,通过从 git 存储库中提取来更新其代码并重新启动该过程,但这对我来说似乎是错误的。这样做的正确方法是什么?
【问题讨论】:
-
我在这里有一个类似的问题:stackoverflow.com/q/44960088/2112538你知道如何处理这个问题吗?谢谢
标签: deployment docker docker-compose