【问题标题】:docker nginx ERR_NAME_NOT_RESOLVEDdocker nginx ERR_NAME_NOT_RESOLVED
【发布时间】:2018-06-18 00:08:25
【问题描述】:

运行 4 个 docker 容器:server/client/nginx/mongo reverse-proxy 客户端似乎在端口 4200 上工作,我可以看到我的应用程序和路由工作。 尝试注册用户时,我请求将以下 httpclient 帖子发送到名为“myserver”的 Docker 容器,该容器应该调用 api。 我收到此 DNS 错误消息。

在 resolv.conf(它显示 127.0.0.11)中查看 NGINX 容器时,这是正确的 dns,Docker 在容器内解析 dns-es。 当我从容器内 ping 到另一个容器的名称时,它可以工作。 当我在服务器端口 3000 上从容器内部和外部远程登录时,它可以在客户端的端口 4200 上远程登录 那么,当我尝试在我的网站上注册帐户时,无法解析 myserver 的原因可能是什么。 几乎就像是从容器外部进行了对 register 的调用,所以它无法解决它,这是正常行为吗?

  let url = 'http://myserver:3000/api/register';

docker-compose.yml 版本:'3'

services:

  nginx:
      build: ./nginx
    # Map Nginx port 80 to the local machine's port 80
      volumes:
        - ./dist:/usr/share/nginx/html
      ports:
        - "80:80"
      depends_on: 
        - client
      networks:
        - app-network
   # Build the container using the client Dockerfile
  client:
      build: ./
    # This line maps the contents of the client folder into the container.
      volumes:
        - ./:/usr/src/app
      ports:
         - "4200:4200"
      networks:
        - app-network

  myserver:
      build: ./express-server
      volumes:
        - ./express-server:/usr/src/server
      environment:
        - NODE_ENV=development
      depends_on:
        - mongo
      ports:
        - "3000:3000"
      networks:
        - app-network

   # Link the client container so that Nginx will have access to it
  mongo:
      environment:
        - AUTH=yes
        - MONGO_INITDB_ROOT_USERNAME=superAdmin
        - MONGO_INITDB_ROOT_PASSWORD=admin123

      image: mongo
      volumes:
        - /var/mongodata/data:/data/db
      ports:
        - "27017:27017"
      networks:
        - app-network   

networks:
   app-network:
      driver: bridge

nginx default.conf

worker_processes 2 ;

events {
    worker_connections 1024;
}
http {
    upstream my-server {
    server myserver:3000;
    }

    upstream client {
    server client:4200;
    }

    server {
        
        location / {
            proxy_pass http://client;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $remote_addr;
        }
        location /api/ {
            proxy_pass http://my-server;
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection 'upgrade';
            proxy_set_header Host $host;
            proxy_cache_bypass $http_upgrade;
            proxy_set_header X-Forwarded-For $remote_addr;
    }        
    }
}

cbdb2e00c6db        meanchat_nginx      "nginx -g 'daemon ..."   15 minutes ago      Up 15 minutes       0.0.0.0:80->80/tcp         meanchat_nginx_1
22406a1e9a31        meanchat_client     "npm start"              15 minutes ago      Up 15 minutes       0.0.0.0:4200->4200/tcp     meanchat_client_1
aa024855d201        meanchat_myserver   "npm start"              About an hour ago   Up 15 minutes       0.0.0.0:3000->3000/tcp     meanchat_myserver_1
b657bd6db7b5        mongo               "docker-entrypoint..."   5 hours ago         Up 15 minutes       0.0.0.0:27017->27017/tcp   b657bd6db7b5_meanchat_mongo_1

172.20.0.1 - - [09/Jan/2018:00:30:02 +0000] "GET /sockjs-node/info?t=1515457802565 HTTP/1.1" 200 90 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:03 +0000] "GET /register HTTP/1.1" 304 0 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:03 +0000] "GET /sockjs-node/044/zh1t2skg/websocket HTTP/1.1" 101 162 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"172.20.0.1 - - [09/Jan/2018:00:30:03 +0000] "GET /inline.bundle.js HTTP/1.1" 304 0 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:03 +0000] "GET /polyfills.bundle.js HTTP/1.1" 304 0 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:03 +0000] "GET /vendor.bundle.js HTTP/1.1" 304 0 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:03 +0000] "GET /styles.bundle.js HTTP/1.1" 304 0 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:03 +0000] "GET /scripts.bundle.js HTTP/1.1" 304 0 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:03 +0000] "GET /main.bundle.js HTTP/1.1" 200 796563 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:06 +0000] "GET /assets/img/cryptoowls.jpg HTTP/1.1" 304 0 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:06 +0000] "GET /roboto-v15-latin-regular.7e367be02cd17a96d513.woff2 HTTP/1.1" 304 0 "http://localhost/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"
172.20.0.1 - - [09/Jan/2018:00:30:06 +0000] "GET /sockjs-node/info?t=1515457806564 HTTP/1.1" 200 90 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"

172.20.0.1 - - [09/Jan/2018:03:31:24 +0000] "GET /sockjs-node/info?t=1515468684563 HTTP/1.1" 200 90 "http://localhost/register" "Mozilla/5.0 (Windows NT 10.0;Win64;x64)AppleWebKit/537.36(KHTML,如 Gecko)Chrome/63.0.3239.132 Safari/537.36"

【问题讨论】:

  • 您是否有任何来自 nginx 的日志显示它无法解析主机名?您是如何将问题隔离到那里的,而不是像您的应用程序那样的东西?如果问题出在应用程序本身,这个问题就没有什么可继续的了。
  • 好点,我的应用程序在没有 docker/ 容器的情况下工作,自从我开始 dockerize 以来,我没有对其进行任何更改,我添加了 nginx 日志,在那里找不到任何东西。解决问题也有一段时间没有发生,现在又回来了。我不确定我做了什么改变才能让它回来。
  • 当我在没有 Docker 的情况下启动一切时,我没有得到任何超时或解决端口 3000 上的问题。我得到:无法加载 localhost:3000/api/register:对预检请求的响应未通过访问控制检查:请求的资源上不存在“Access-Control-Allow-Origin”标头。因此,Origin 'localhost:4200' 不允许访问。我认为这是一个 cors 问题,这可能是相关的吗?
  • 如果您在 nginx 中没有看到错误,那么您在哪里看到它?
  • 某事为浏览器提供了要访问的 URL,这将是您的应用程序。 Nginx 不会更改返回网页的内容,并且您已将 Docker 描述为具有 DNS 的预期行为。我们没有足够的应用程序详细信息来告诉您它出了什么问题,但它不应该将内部容器 URL 发送到外部浏览器。

标签: docker nginx containers resolve


【解决方案1】:

来自cmets的回答:

当使用反向代理连接到容器时,应用程序使用的所有 URL 都需要指向该反向代理而不是应用程序。通常,您通过在 URL 中提供不带主机名的路径来执行此操作。如果您计划使用基于虚拟路径的反向代理,您需要更进一步并在您的 URL 中使用相对路径。这一切都需要在应用程序向客户端发送的响应中发生。

【讨论】:

  • stackoverflow.com/questions/48180767/… 刚刚遇到另一个问题
  • 在使用套接字时,您有解决这个问题的想法吗?使用套接字时,您需要提供要连接的端口,因此(AFAIK)您必须提供基址/主机地址。您知道在这种情况下如何解决上述问题吗?
  • @Hummus 我相信这与这里的问题不同。使用顶部的“”链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-10-06
  • 1970-01-01
  • 2018-02-09
  • 2014-08-22
  • 2017-03-27
  • 1970-01-01
  • 2016-02-07
相关资源
最近更新 更多