在 docker 容器中禁用 ipv6
Disable ip v6 in docker container
我在 docker 主机上启用了 ipv6,但有一个特定容器的 ipv6 导致了问题。有没有办法通过命令行参数或 dockerfile 指令启动不支持 ipv6 的容器?
不幸的是没有:--ipv6
是一个守护进程范围的标志,不能在每个容器的基础上被覆盖。
有点棘手。我只是遇到了同样的问题,我所做的是 运行 带有 ip 的容器:
docker run --name YourDockerContainer -p 192.168.99.100:80:80
这将在这个 ip 上启动容器:192.168.99.100
。
两个选项:
虽然 运行 docker 命令使用 --sysctl net.ipv6.conf.all.disable_ipv6=1
选项,如果仍然失败,请传递以下参数。
--sysctl net.ipv6.conf.all.disable_ipv6=0
为我工作:
docker run -d -i -t --name django_1.0 --sysctl
net.ipv6.conf.all.disable_ipv6=1 -p 192.168.20.148:8000:8000/tcp -p
192.168.20.148:8000:8000/udp -p 192.168.20.148:3000:3000/tcp -p
192.168.20.148:3000:3000/udp IMAGE_NAME
root:~# netstat -tlp | grep -i docker
tcp 0 0 ip-192-168-20-148.:8000 *:* LISTEN 4598/docker-proxy
tcp 0 0 ip-192-168-20-148.:3000 *:* LISTEN 4642/docker-proxy
要禁用 ipv6,运行 docker 容器:
-e "extra_params=--o:net.proto=IPv4"
在 Ubuntu 20.04,collabora office 容器上测试。
更新:
但这对 运行ing pgadmin 容器不起作用,因此添加了额外的行:
-e "PGADMIN_LISTEN_ADDRESS=0.0.0.0" \
如果您希望从 Linux Docker 图像中禁用 IPv6,即使文件系统是只读的,这似乎也能工作。
sysctl net.ipv6.conf.all.disable_ipv6
sysctl net.ipv6.conf.default.disable_ipv6
这些命令是有特权的; 运行 和 sudo
如果你不是 root
。
我认为使用 Docker 禁用 ipv6 的方法是创建一个没有 ipv6 的网络。
例如
docker network create --ipv6=false disable_ipv6
并运行:
docker run --network disable_ipv6
docker build --network disable_ipv6
我在 docker 主机上启用了 ipv6,但有一个特定容器的 ipv6 导致了问题。有没有办法通过命令行参数或 dockerfile 指令启动不支持 ipv6 的容器?
不幸的是没有:--ipv6
是一个守护进程范围的标志,不能在每个容器的基础上被覆盖。
有点棘手。我只是遇到了同样的问题,我所做的是 运行 带有 ip 的容器:
docker run --name YourDockerContainer -p 192.168.99.100:80:80
这将在这个 ip 上启动容器:192.168.99.100
。
两个选项:
虽然 运行 docker 命令使用 --sysctl net.ipv6.conf.all.disable_ipv6=1
选项,如果仍然失败,请传递以下参数。
--sysctl net.ipv6.conf.all.disable_ipv6=0
为我工作:
docker run -d -i -t --name django_1.0 --sysctl
net.ipv6.conf.all.disable_ipv6=1 -p 192.168.20.148:8000:8000/tcp -p
192.168.20.148:8000:8000/udp -p 192.168.20.148:3000:3000/tcp -p
192.168.20.148:3000:3000/udp IMAGE_NAME
root:~# netstat -tlp | grep -i docker
tcp 0 0 ip-192-168-20-148.:8000 *:* LISTEN 4598/docker-proxy
tcp 0 0 ip-192-168-20-148.:3000 *:* LISTEN 4642/docker-proxy
要禁用 ipv6,运行 docker 容器:
-e "extra_params=--o:net.proto=IPv4"
在 Ubuntu 20.04,collabora office 容器上测试。
更新: 但这对 运行ing pgadmin 容器不起作用,因此添加了额外的行:
-e "PGADMIN_LISTEN_ADDRESS=0.0.0.0" \
如果您希望从 Linux Docker 图像中禁用 IPv6,即使文件系统是只读的,这似乎也能工作。
sysctl net.ipv6.conf.all.disable_ipv6
sysctl net.ipv6.conf.default.disable_ipv6
这些命令是有特权的; 运行 和 sudo
如果你不是 root
。
我认为使用 Docker 禁用 ipv6 的方法是创建一个没有 ipv6 的网络。
例如
docker network create --ipv6=false disable_ipv6
并运行:
docker run --network disable_ipv6
docker build --network disable_ipv6