如何把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.conf
的proxy_pass
行。
希望有所帮助。