You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器内IPv6本地连接失败,如何用curl访问localhost?

Docker容器内通过IPv6连接localhost的解决方案

默认Docker容器禁用IPv6网络栈,导致无法通过[::1]连接localhost,报错Cannot assign requested address。以下是针对容器内IPv6调试的解决方法:

1. 临时启用容器IPv6支持

运行容器时添加参数,开启IPv6并禁用内核的IPv6禁用开关:

docker build . -t test-ipv6 && docker run --ipv6 --sysctl net.ipv6.conf.all.disable_ipv6=0 test-ipv6

2. 修改服务配置,监听IPv6地址

以Nginx为例,默认仅监听IPv4地址,需修改配置让它同时监听IPv6:

  • 创建自定义nginx.conf文件:
events {
    worker_connections 1024;
}

http {
    include       /etc/nginx/mime.types;
    default_type  application/octet-stream;

    server {
        listen 80;
        listen [::]:80; # 新增IPv6监听规则

        server_name localhost;

        location / {
            root   /usr/share/nginx/html;
            index  index.html index.htm;
        }
    }
}
  • 更新Dockerfile,替换默认Nginx配置:
FROM nginx
COPY nginx.conf /etc/nginx/nginx.conf
CMD nginx && sleep 1 && curl --ipv6 -s -v http://localhost

3. 验证连接效果

重新构建并运行容器,此时curl会成功连接到IPv6的localhost:

docker build . -t test-ipv6 && docker run --ipv6 --sysctl net.ipv6.conf.all.disable_ipv6=0 test-ipv6

成功输出示例:

*   Trying [::1]:80...
* Connected to localhost ([::1]) port 80 (#0)
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.74.0
> Accept: */*
> 
< HTTP/1.1 200 OK
< Server: nginx/1.25.3
< Date: Wed, 01 Jan 2024 00:00:00 GMT
< Content-Type: text/html
< Content-Length: 615
< Last-Modified: Tue, 28 Nov 2023 10:15:00 GMT
< Connection: keep-alive
< ETag: "abc123-def456"
< Accept-Ranges: bytes
< 
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
...

可选:永久启用Docker IPv6支持

如果需要所有容器默认支持IPv6,修改Docker守护进程配置文件/etc/docker/daemon.json:

{
  "ipv6": true,
  "fixed-cidr-v6": "fd00::/80"
}

重启Docker服务生效:

systemctl restart docker

之后运行容器无需再添加--ipv6参数。

内容的提问来源于stack exchange,提问作者porton

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.23 03:06:10