gpt4 book ai didi

nginx - 如何使用Docker将ownCloud置于Nginx之后?

转载 作者:行者123 更新时间:2023-12-02 19:11:44 26 4
gpt4 key购买 nike

我想通过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不会映射到owncloud。这是因为, docker 仅在主机上的owncloud端口80上映射端口6789

想象一下,每个容器以及Docker主机都是一台完全独立的机器。在这种情况下,nginx机器向127.0.0.1发送一个请求,该请求本身就是自身,而不是主机,而不是owncloud机器。

在Docker容器之间进行通信的方法有很多,您已经在使用其中一种,docker compose内置于linking system

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

考虑到这一点,这是与docker compose的链接系统一起使用的完整配置。
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 {}

唯一的区别是,您只需要在owncloud镜像上公开 80端口,而无需将其映射到 proxy_pass中的主机和 nginx.conf行。

希望能有所帮助。

关于nginx - 如何使用Docker将ownCloud置于Nginx之后?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35137944/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com