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

标签 nginx docker owncloud

我想通过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/

相关文章:

apache - Longpolling对服务器的影响

angularjs - 用于缓存 Angular 应用程序文件的 Nginx 配置

node.js - 如何为在本地主机 :3000 上运行的 Create-React-App 设置通过 NGINX 的代理

ruby-on-rails - dotenv 是否会覆盖 docker compose 设置的环境变量?

docker - 无法连接到 docker 容器中的数据库主机,从 api-service 到 db-service,以便在 golang 中使用 goose 进行迁移

Thunderbird 和 SoGo 连接器 : Never asked for credentials

Docker 和 NGINX - 使用 docker-compose 构建时在上游找不到主机

node.js - 如何使用 docker + Google Cloud Build 公开构建步骤结果

owncloud - 使用 windows 客户端同步两个 owncloud 服务器

linux - 使用 curl 将文件上传到 owncloud