在尝试调试网络问题本地我们的内联网,很明显,curl host nslookup和dig不同的表现。凡dig与host返回有问题的URL,IP地址curl和nslookup回报:
curl: (6) Could not resolve host: internal.site.company.com
Run Code Online (Sandbox Code Playgroud)
和
nslookup: can't resolve 'internal.site.company.com`
Run Code Online (Sandbox Code Playgroud)
虽然这不应该的事情,在多予方面的问题的本质,这个问题上和后面发生的docker-machine(使用泊坞窗机上都进行测试virtualbox,并parallels要准确)。在docker-machine和容器它的主机都在他们所需的内部DNS服务器的正确IP地址/etc/resolv.conf。无法解析名称的机器也可以访问所需 URL 的 IP 地址。如上所述,地址是内部站点,我们的 DNS 服务器也是内部站点。该站点可从docker-machine安装的计算机访问和解析。
这让我想到了这些问题......
1) 在幕后,有什么dig和host做的与两者cURL和和不同nslookup?
2)什么可能阻止浏览器或curl以两种方式解析 URLhost并dig成功解析名称?
dig -v: DiG 9.11.1
host -v: host 9.11.1
curl …
我有一个从这个 repo克隆的 LEMP 堆栈的 docker 设置。
在运行窗口 10 的开发机器上一切正常,但是当我将图像推送到 docker hub 并将其拉到我的 VPS 上时,无论我做什么,我总是收到此错误:
[emerg] 1#1: host not found in upstream "php-fpm:9000" in /etc/nginx/conf.d/upstream.conf:1
Run Code Online (Sandbox Code Playgroud)
此错误来自两个文件。
这是代码:
RUN echo "upstream php-upstream { server ${PHP_UPSTREAM_CONTAINER}:${PHP_UPSTREAM_PORT}; }" > /etc/nginx/conf.d/upstream.conf \
&& rm /etc/nginx/conf.d/default.conf
Run Code Online (Sandbox Code Playgroud)
第二个 来自这个 Nginx default.conf 文件
这是代码:
location ~ \.php$ {
...
fastcgi_pass php-upstream;
...
}
Run Code Online (Sandbox Code Playgroud)
我说这两个文件是 b/c 其他地方没有引用 php-upstream 的原因。
我已经尝试了添加/删除主机、添加depends_on、更改 nginx、php 版本、禁用 selinux 的所有可能组合,但它不起作用。我总是在生产中遇到相同的错误,但在本地服务器上一切正常。
我正在运行一个小臂板,在我们的本地网络内提供一些服务。当我尝试了解 docker 对 ipv6 的支持时,我对第一次测试的结果感到非常困惑。
我的网络由使用 dhcpv6 的单个路由控制,每个客户端都有 2 个有效的全局 ipv6 地址(还有 1 个本地 ipv4),并受到路由器防火墙的保护(不允许从互联网到客户端的请求)。
Arm 板运行的是 ubuntu 16.04,具有有效的 ipv6 地址并启用了隐私扩展。
所有docker容器都使用默认的桥接网络,没有任何调整。
在docker主机上
netstat -tulpen|grep docker
Run Code Online (Sandbox Code Playgroud)
节目
tcp6 0 0 :::8080 :::* LISTEN 0 22490 1559/docker-proxy
Run Code Online (Sandbox Code Playgroud)
没有一个 ipv4 服务正在侦听。
在这个 docker 容器内,相同的 netstat 请求给出
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 0 23955 8/nginx
tcp6 0 0 :::80 :::* LISTEN 0 23956 8/nginx
Run Code Online (Sandbox Code Playgroud)
Nginx 正在侦听 ipv6 和 ipv4 - 端口 80 暴露给端口 8080
docker run (...) -p 8080:80 (...)
Run Code Online (Sandbox Code Playgroud)
检查桥接网络
docker …Run Code Online (Sandbox Code Playgroud)