docker - docker中的nginx无法与localhost对话

标签 docker nginx

目标是:

  • 为所有请求返回相同的index.html
  • 路径名从“/ api”开始(例如localhost / api / asd)的情况除外-在这种情况下,将此请求转发到在localhost:8080上运行的应用程序

  • 我已经在ubuntu上运行了nginx,成功完成了任务。但是,当我在docker容器中尝试相同的操作时,每个“/ api”请求都会得到502:

    2019/11/03 14:35:39 [error] 6#6: *22 connect() failed (111: Connection refused) while connecting to upstream, client: 172.17.0.1, server: 127.0.0.1, request: "GET /api/library/source/find?page=0&size=40&q=JTdCJTIycXVlcnklMjIlM0ElMjIlMjIlMkMlMjJwZXJpb2QlMjIlM0ElMjJBTlRJUVVJVFklMjIlMkMlMjJjbGFzc2lmaWNhdGlvbnMlMjIlM0ElNUIlNUQlMkMlMjJ0eXBlcyUyMiUzQSU1QiU1RCU3RA== HTTP/1.1", upstream: "http://127.0.0.1:8080/api/library/source/find?page=0&size=40&q=JTdCJTIycXVlcnklMjIlM0ElMjIlMjIlMkMlMjJwZXJpb2QlMjIlM0ElMjJBTlRJUVVJVFklMjIlMkMlMjJjbGFzc2lmaWNhdGlvbnMlMjIlM0ElNUIlNUQlMkMlMjJ0eXBlcyUyMiUzQSU1QiU1RCU3RA==", host: "localhost", referrer: "http://localhost/library/period/antiquity" 172.17.0.1 - - [03/Nov/2019:14:35:39 +0000] "GET /api/library/source/find?page=0&size=40&q=JTdCJTIycXVlcnklMjIlM0ElMjIlMjIlMkMlMjJwZXJpb2QlMjIlM0ElMjJBTlRJUVVJVFklMjIlMkMlMjJjbGFzc2lmaWNhdGlvbnMlMjIlM0ElNUIlNUQlMkMlMjJ0eXBlcyUyMiUzQSU1QiU1RCU3RA== HTTP/1.1" 502 559 "http://localhost/library/period/antiquity" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.87 Safari/537.36" "-"



    '172.17.0.1'看起来很奇怪。我使用“nginx”镜像,它的/ etc / hosts文件中包含以下内容:
    127.0.0.1   localhost
    ::1 localhost ip6-localhost ip6-loopback
    fe00::0 ip6-localnet
    ff00::0 ip6-mcastprefix
    ff02::1 ip6-allnodes
    ff02::2 ip6-allrouters
    172.17.0.2  1a0b306a3a80
    

    注意'172.17.0.2',而不是'172.17.0.1'。

    我正在运行的Dockerfile和Nginx配置可以在这里找到:
    https://github.com/ahlinist/tempvs-ui

    该镜像的构建和运行方式为:
    sudo docker构建-t tempvs-ui
    须藤 jetty 运行-p 80:80 tempvs-ui

    我究竟做错了什么?如何使Docker镜像将请求发送到localhost:8080?

    最佳答案

    快速解答:使用附加参数运行docker网络:

    docker run -p 80:80 --network=host tempvs-ui
    

    事实是,您的docker(主机)服务器和docker容器中的localhost不相同。
    在您当前的实现中,重定向是在docker容器内部的发生的。而您的目标应用程序在主机上运行。这就是为什么存在“连接拒绝”错误的原因。
    文档:docker networkdocker run network param

    关于docker - docker中的nginx无法与localhost对话,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58681224/

    相关文章:

    PostgreSQL:后台 worker "logical replication launcher"已退出,退出代码为 1

    python - 带有gunicorn和nginx的Django不会返回404或500

    nginx - Nginx 上的 send_timeout 选项有什么作用?

    ruby-on-rails - 将 Kubernetes 与 ruby​​ on rails 应用程序一起使用

    mysql - Adminer 和 phpmyadmin 的 UTF-8 输入问题

    ip - 将NFS服务器放入Docker容器

    docker - 不使用命令 "docker run"覆盖 Dockerfile 中的入口点

    ruby - Ruby Kafka未捕获的异常:未能找到组协调器

    azure - Docker 无法从 Azure 应用服务中提取镜像

    php - 无法在远程服务器上使用 Laravel 5.1 检索 url GET 参数