如何把ownCloud与Docker放在Nginx后面?

我想通过Nginx访问一个ownCloud实例,这两个实例都是在不同的Docker容器中设置的。 所以我做了docker-compose.yml

 nginx: image: nginx ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf links: - owncloud owncloud: image: owncloud ports: - 6789:80 volumes: - ~/ownCloud:/var/www/html/data 

nginx.conf用以下内容来接收请求:

 http { server { listen 80 default; server_name docker.dev; location / { proxy_pass http://127.0.0.1:6789; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } events {} 

似乎对我来说,但Nginx注销这样的消息:

[error] 6#6: *8 connect() failed (111: Connection refused) while connecting to upstream, client: 192.168.99.1, server: docker.dev

我究竟做错了什么?

问题是在nginx容器内, 127.0.0.1:6789 6789不会映射到owncloud。 这是因为,docker只在主机上的自有云端口6789上映射端口80

想象每个容器以及docker主机是一个完全独立的机器。 在这种情况下,nginx机器发送一个请求到127.0.0.1 ,而不是主机,而不是自己的机器。

docker集装箱之间有很多交stream的方式,你已经在使用其中的一个,docker组成的链接系统 。

在您docker-compose.yml您已经将owncloud链接到了nginx,这是正确的。 这是做的是编辑nginx容器/etc/hosts文件映射owncloud自有云容器的ip地址。 (您可以通过运行docker exec name_of_nginx_container cat /etc/hosts来检查它)。 这意味着,在nginx容器内http://owncloud映射到自己的云端comtainer上的端口80

考虑到这一点,这是一个完整的configuration,适用于docker撰写的链接系统。

docker-compose.yml

 nginx: image: nginx ports: - 80:80 volumes: - ./nginx.conf:/etc/nginx/nginx.conf links: - owncloud owncloud: image: owncloud expose: - 80 volumes: - ~/ownCloud:/var/www/html/data 

nginx.conf

 http { server { listen 80 default; server_name docker.dev; location / { proxy_pass http://owncloud; proxy_buffering off; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } events {} 

唯一的区别是您只需要在自己的云图像上显示端口80 ,而不是将其映射到主机和nginx.confproxy_pass行。

希望有所帮助。

Interesting Posts