更新二
现在是2015年7月16日,事情又变了。我已经从 Jason Wilder: https://github.com/jwilder/nginx-proxy中发现了这个自动容器,它解决了这个问题,只要停靠码头运行容器。这就是我现在用来解决这个问题的方法。
更新
现在是2015年7月,与联网 Docker 容器相关的事情发生了巨大的变化。现在有许多不同的产品(以各种方式)来解决这个问题。
您应该使用这篇文章来获得对 docker-link 服务发现方法的基本理解,这是最基本的方法,工作得非常好,实际上比其他大多数解决方案需要更少的花里胡哨。它的局限性在于,在任何给定集群中的单独主机上将容器联网是相当困难的,而且一旦联网,容器就不能重新启动,但是它确实提供了一种在同一主机上联网容器的快速且相对简单的方法。这是一个很好的方法来了解你可能用来解决这个问题的软件实际上是做什么的。
此外,你可能还想看看 Docker 的新兴网络,Hashicorp 的领事,Weaveworks 的编织,Jeff Lindsay 的程序员/领事 & gliderlab/注册员,以及 Google 的 Kubernetes。
还有一些 CoreOS 产品,它们利用 etcd、 fleet 和 flannel。
如果你真的想开个派对你可以组织一个集群来运行 MesSphere 或者 Deis 或者 Flynn。
如果你(像我一样)刚开始接触社交网络,那么你应该拿出你的老花镜,在 Wi-Hi-Fi 上点击“用星星画出天空ーー恩雅最好的作品”,然后喝一杯啤酒ーー你要过一段时间才能真正明白你到底想要做什么。提示: 您正试图在集群控制平面中实现服务发现层。这是度过周六晚上的好方法。
这很有趣,但是我希望在投入其中之前,我能够花时间更好地教育自己关于人际网络的一般知识。我最终找到了几篇来自仁慈的数字海洋教程之神的文章: 网络术语和理解入门... 网络。我建议在开始之前先读几遍。
玩得开心!
原文
我似乎不能理解 Docker
容器的端口映射。特别是如何将来自 Nginx 的请求传递到同一服务器上监听另一个港口的另一个集装箱。
我得到了一个 Dockerfile,用于 Nginx 容器,如下所示:
FROM ubuntu:14.04
MAINTAINER Me <me@myapp.com>
RUN apt-get update && apt-get install -y htop git nginx
ADD sites-enabled/api.myapp.com /etc/nginx/sites-enabled/api.myapp.com
ADD sites-enabled/app.myapp.com /etc/nginx/sites-enabled/app.myapp.com
ADD nginx.conf /etc/nginx/nginx.conf
RUN echo "daemon off;" >> /etc/nginx/nginx.conf
EXPOSE 80 443
CMD ["service", "nginx", "start"]
然后,api.myapp.com
配置文件如下所示:
upstream api_upstream{
server 0.0.0.0:3333;
}
server {
listen 80;
server_name api.myapp.com;
return 301 https://api.myapp.com/$request_uri;
}
server {
listen 443;
server_name api.mypp.com;
location / {
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'upgrade';
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;
proxy_cache_bypass $http_upgrade;
proxy_pass http://api_upstream;
}
}
还有一个是 app.myapp.com
。
然后我跑过去:
sudo docker run -p 80:80 -p 443:443 -d --name Nginx myusername/nginx
有人帮忙吗?