今天早些时候,我尝试设置一个包含几个不同服务的 docker compose 文件,其中一个服务正在运行 nginx:latest。我的其他服务之一在 alpine:latest 上运行,并且...
今天早些时候,我试图设置一个包含几个不同服务的 docker compose 文件,其中一个正在运行 nginx:latest
。我的其他服务之一正在运行 alpine:latest
,无论我怎么尝试,我都无法成功地从 alpine 容器中 curl nginx 服务,并且一直看到 Failed to connect to nginx port 80
curl 错误。从运行其他镜像的容器中 curl nginx 服务似乎没问题。
为了尝试重现该问题,我 docker-compose.yml
尽可能地减少了文件,并得出了以下结论:
services:
alpine-test:
build:
dockerfile: Dockerfile.alpine
command: sleep 3600
networks:
- test-network
ubuntu-test:
build:
dockerfile: Dockerfile.ubuntu
command: sleep 3600
networks:
- test-network
nginx:
image: nginx:latest
ports:
- "8080:80"
networks:
- test-network
networks:
test-network:
driver: bridge
Dockerfile.ubuntu
:
FROM ubuntu:latest
RUN apt update -y && apt install -y curl
Dockerfile.alpine
:
FROM alpine:latest
RUN apk update && apk add curl
我正在用以下命令启动撰写项目:
docker compose -f docker-compose.test.yaml up --force-recreate
从 ubuntu 服务 curl nginx 服务:
docker exec proj-local-ubuntu-test-1 curl -vv http://nginx
输出:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Trying 172.27.0.3:80...
* Connected to nginx (172.27.0.3) port 80 (#0)
> GET / HTTP/1.1
> Host: nginx
> User-Agent: curl/7.81.0
> Accept: */*
>
* Mark bundle as not supporting multiuse
< HTTP/1.1 200 OK
< Server: nginx/1.27.0
< Date: Fri, 14 Jun 2024 23:52:50 GMT
< Content-Type: text/html
< Content-Length: 615
< Last-Modified: Tue, 28 May 2024 13:22:30 GMT
< Connection: keep-alive
< ETag: "6655da96-267"
< Accept-Ranges: bytes
<
{ [615 bytes data]
100 615 100 615 0 0 820k 0 --:--:-- --:--:-- --:--:-- 600k
* Connection #0 to host nginx left intact
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
html { color-scheme: light dark; }
body { width: 35em; margin: 0 auto;
font-family: Tahoma, Verdana, Arial, sans-serif; }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>
<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>
<p><em>Thank you for using nginx.</em></p>
</body>
</html>
从 alpine 服务 curling nginx 服务:
docker exec proj-local-alpine-test-1 curl -vv http://nginx
输出:
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Host nginx:80 was resolved.
* IPv6: (none)
* IPv4: 192.168.1.1
* Trying 192.168.1.1:80...
0 0 0 0 0 0 0 0 --:--:-- 0:02:12 --:--:-- 0* connect to 192.168.1.1 port 80 from 172.27.0.3 port 54744 failed: Operation timed out
* Failed to connect to nginx port 80 after 132953 ms: Couldn't connect to server
0 0 0 0 0 0 0 0 --:--:-- 0:02:12 --:--:-- 0
* Closing connection
curl: (28) Failed to connect to nginx port 80 after 132953 ms: Couldn't connect to server
所有容器似乎都正确共享同一个网络:
[
{
"Name": "cmapp-local_test-network",
"Id": "5a258b6b903fec157391704554845314423dd261614cbbffb5feb178edbfb0cb",
"Created": "2024-06-14T16:35:02.946998948-07:00",
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.27.0.0/16",
"Gateway": "172.27.0.1"
}
]
},
"Internal": false,
"Attachable": false,
"Ingress": false,
"ConfigFrom": {
"Network": ""
},
"ConfigOnly": false,
"Containers": {
"1a481a82e1aae822cacca707a997fca13d2a15a7a2ba9acaa2f67716f432301a": {
"Name": "cmapp-local-alpine-test-1",
"EndpointID": "cda6b08db448c918e4d3763cbc1d6bb628ee592f9dc6c61d2cb5e2233fb7ffc0",
"MacAddress": "02:42:ac:1b:00:03",
"IPv4Address": "172.27.0.3/16",
"IPv6Address": ""
},
"78416ae61c2c86dec2b978ba07dcaf7dc96b17fcd6b608ef21a60b55a90a05d6": {
"Name": "cmapp-local-ubuntu-test-1",
"EndpointID": "bf56252dd5a4b5ebd6cdab1f2c3b8653d64e5ced1d571b70c00caef2fc8722b8",
"MacAddress": "02:42:ac:1b:00:04",
"IPv4Address": "172.27.0.4/16",
"IPv6Address": ""
},
"a4e95ed049894930573c8d2713a832c27e5f8ef3d14196298e6c99c786aed25a": {
"Name": "cmapp-local-nginx-1",
"EndpointID": "74f816a26ff1bafc5936fe67d2e4c750ca1fdaaeedb879ea01a9aec5225e4e35",
"MacAddress": "02:42:ac:1b:00:02",
"IPv4Address": "172.27.0.2/16",
"IPv6Address": ""
}
},
"Options": {},
"Labels": {
"com.docker.compose.network": "test-network",
"com.docker.compose.project": "cmapp-local",
"com.docker.compose.version": "2.27.1"
}
}
]
ubuntu 和 alpine 容器中的文件看起来完全相同,大概是因为 docker 生成了它们 resolv.conf
:
Ubuntu resolv.conf
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.
nameserver 127.0.0.11
search lan
options edns0 trust-ad ndots:0
# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [host(127.0.0.53)]
# Overrides: []
# Option ndots from: internal
高山 resolv.conf
# Generated by Docker Engine.
# This file can be edited; Docker Engine will not make further changes once it
# has been modified.
nameserver 127.0.0.11
search lan
options edns0 trust-ad ndots:0
# Based on host file: '/etc/resolv.conf' (internal resolver)
# ExtServers: [host(127.0.0.53)]
# Overrides: []
# Option ndots from: internal
在 Alpine 容器中 nslookup
运行
Server: 127.0.0.11
Address: 127.0.0.11:53
Non-authoritative answer:
Non-authoritative answer:
Name: nginx.lan
Address: 192.168.1.1
而 nslookup
ubuntu 容器中的输出更符合我的预期:
Server: 127.0.0.11
Address: 127.0.0.11#53
Non-authoritative answer:
Name: nginx
Address: 172.27.0.2
任何帮助都将不胜感激。谢谢。