Centos 7.9 - Docker 容器无法访问互联网
Centos 7.9 - Docker container can't access internet
我目前有一个 运行 docker 堆栈,服务可以通过桥接网络相互通信。
即使入站连接有效(互联网 --> 容器),出站连接无效:我无法从这些容器 wget;curl; 等到互联网。
我的主机在 Centos 上运行,考虑到与此类问题相关的在线帖子数量,我禁用了 firewalld 以检查是否是问题所在:不是。
CentOS Linux 发布 7.9.2009
Docker 版本 1.13.1,构建 0be3e21/1.13.1
docker-编写版本 1.28.5,构建 c4eb3a1f
networks:
mynetwork:
driver: bridge
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Containers": {
[...]
},
"Options": {},
"Labels": {
"com.docker.compose.network": "mynetwork",
"com.docker.compose.project": "myproject",
"com.docker.compose.version": "1.28.5"
}
Curl 与 url:
curl www.tester.com
curl: (6) Could not resolve host: www.tester.com
Curl 虽然 IP 工作。
好像跟DNS有关,但是我对这方面知识不多。如何调整我的配置以授予我的容器访问互联网的权限? (不设置网络:主机)
编辑:
将 DNS 设置到 docker-compose 文件中非常有效。感谢@atline 的领导!
dns:
- 8.8.8.8
dns_search:
- domain.name
对于那些尽管将 DNS 设置到 docker 设置文件(守护进程 / docker.service / ...)但仍有类似问题的人,看起来 docker-compose 没有' t 使用 Docker “自定义”默认值;所以直接使用docker-compose
您可以通过多种方式为容器配置 dns:
1.添加 dns when 运行 container:
docker run --dns 192.168.1.1 busybox nslookup google.com
2。配置/etc/docker/daemon.json
为所有容器设置默认dns:
{
"dns": ["192.168.1.1", "8.8.8.8"]
}
然后sudo service docker restart
让它生效
3。更改 systemd 脚本 /lib/systemd/system/docker.service
以包含 --dns
:
[Service]
ExecStart=/usr/bin/dockerd --dns 192.168.1.1 -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
然后重启docker使其生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status docker
注意:您应该使用您的真实 dns 来替换 192.168.1.1 的值。
我目前有一个 运行 docker 堆栈,服务可以通过桥接网络相互通信。
即使入站连接有效(互联网 --> 容器),出站连接无效:我无法从这些容器 wget;curl; 等到互联网。
我的主机在 Centos 上运行,考虑到与此类问题相关的在线帖子数量,我禁用了 firewalld 以检查是否是问题所在:不是。
CentOS Linux 发布 7.9.2009
Docker 版本 1.13.1,构建 0be3e21/1.13.1
docker-编写版本 1.28.5,构建 c4eb3a1f
networks:
mynetwork:
driver: bridge
"Scope": "local",
"Driver": "bridge",
"EnableIPv6": false,
"IPAM": {
"Driver": "default",
"Options": null,
"Config": [
{
"Subnet": "172.19.0.0/16",
"Gateway": "172.19.0.1"
}
]
},
"Internal": false,
"Attachable": true,
"Containers": {
[...]
},
"Options": {},
"Labels": {
"com.docker.compose.network": "mynetwork",
"com.docker.compose.project": "myproject",
"com.docker.compose.version": "1.28.5"
}
Curl 与 url:
curl www.tester.com
curl: (6) Could not resolve host: www.tester.com
Curl 虽然 IP 工作。
好像跟DNS有关,但是我对这方面知识不多。如何调整我的配置以授予我的容器访问互联网的权限? (不设置网络:主机)
编辑:
将 DNS 设置到 docker-compose 文件中非常有效。感谢@atline 的领导!
dns:
- 8.8.8.8
dns_search:
- domain.name
对于那些尽管将 DNS 设置到 docker 设置文件(守护进程 / docker.service / ...)但仍有类似问题的人,看起来 docker-compose 没有' t 使用 Docker “自定义”默认值;所以直接使用docker-compose
您可以通过多种方式为容器配置 dns:
1.添加 dns when 运行 container:
docker run --dns 192.168.1.1 busybox nslookup google.com
2。配置/etc/docker/daemon.json
为所有容器设置默认dns:
{
"dns": ["192.168.1.1", "8.8.8.8"]
}
然后sudo service docker restart
让它生效
3。更改 systemd 脚本 /lib/systemd/system/docker.service
以包含 --dns
:
[Service]
ExecStart=/usr/bin/dockerd --dns 192.168.1.1 -H fd:// -H tcp://0.0.0.0:2375 --containerd=/run/containerd/containerd.sock
然后重启docker使其生效:
sudo systemctl daemon-reload
sudo systemctl restart docker
sudo systemctl status docker
注意:您应该使用您的真实 dns 来替换 192.168.1.1 的值。