Docker Desktop 上的网络功能

Docker Desktop 上的网络功能

Docker Desktop 提供了一系列网络功能,让用户更便捷地使用 Docker。

适用于所有平台的网络功能

VPN直通

Docker Desktop 的网络功能也可以在连接到 VPN 时正常工作。这是因为 Docker Desktop 会拦截来自容器的流量,并将其注入到主机中,就像这些流量是直接来自 Docker 应用程序一样。

端口映射

当你使用 -p 参数运行容器时,例如:

console 复制代码
$ docker run -p 80:80 -d nginx

Docker Desktop 会将运行在容器的 80 端口上的服务映射到主机的 80 端口上,这样你就可以在 localhost 的 80 端口上访问到 nginx 服务。如果你的主机的 80 端口已经被占用,你也可以将容器的服务映射到主机的其他端口上:

console 复制代码
$ docker run -p 8000:80 -d nginx

这样,访问 localhost:8000 的请求就会被转发到容器的 80 端口上。-p 参数的格式为 HOST_PORT:CONTAINER_PORT

HTTP/HTTPS 代理支持

Docker Desktop 支持 HTTP 和 HTTPS 代理。

详见下一篇博客

SOCKS5 代理支持

从 Docker Desktop 4.28.0 版本开始,Docker Desktop 支持 SOCKS5 代理。SOCKS 是一种网络协议,它可以通过代理服务器将网络数据包从客户端路由到服务器,从而为用户和应用程序提供了增强隐私、安全性和网络性能的方法。

你可以启用 SOCKS 代理支持,以允许传出请求(例如拉取镜像),并从主机访问 Linux 容器后端 IP。

要启用和设置 SOCKS 代理支持:

  1. 导航到 设置 中的 资源 选项卡。
  2. 从下拉框中选择 代理
  3. 打开 手动代理配置 开关。
  4. Secure Web Server HTTPS 框中,粘贴你的 socks5://host:port URL。

socks代理需要Docker-Desktop企业订阅

适用于 Mac 和 Linux 的网络功能

SSH 代理转发

Mac 和 Linux 上的 Docker Desktop 允许你在容器内使用主机的 SSH 代理。

  1. 通过向 docker run 命令添加以下参数来绑定挂载 SSH 代理套接字:

    console 复制代码
    $--mount type=bind,src=/run/host-services/ssh-auth.sock,target=/run/host-services/ssh-auth.sock
  2. 在容器中添加 SSH_AUTH_SOCK 环境变量:

    console 复制代码
    $ -e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock"

要在 Docker Compose 中启用 SSH 代理,请将以下标志添加到你的服务中:

yaml 复制代码
services:
 web:
   image: nginx:alpine
   volumes:
     - type: bind
       source: /run/host-services/ssh-auth.sock
       target: /run/host-services/ssh-auth.sock
   environment:
     - SSH_AUTH_SOCK=/run/host-services/ssh-auth.sock

已知限制

更改内部 IP 地址

你可以在 设置 中更改 Docker 使用的内部 IP 地址。但是,更改 IP 后,你需要重置 Kubernetes 集群,并保留任何活动的 Swarm。

主机上没有 docker0 桥接口

由于 Docker Desktop 中实现网络的方式,你在主机上看不到 docker0 接口。这个接口实际上是在虚拟机中。

无法 ping 容器

Docker Desktop 无法将流量路由到 Linux 容器。但是,如果你是 Windows 用户,则可以访问 Windows 容器。

无法进行每个容器的 IP 寻址

这是因为无法从主机访问 Docker bridge 网络。但是,如果你是 Windows 用户,则可以使用 Windows 容器进行每个容器的 IP 寻址。

用例和解决方法

从容器连接到主机上的服务

主机有一个不断变化的 IP 地址,如果你没有网络访问权限,则无法访问。我们建议你连接到特殊的 DNS 名称 host.docker.internal,它会解析为主机使用的内部 IP 地址。

你还可以使用 gateway.docker.internal 来访问网关。

如果你在机器上安装了 Python,你可以使用以下步骤从容器连接到主机上的服务:

  1. 运行以下命令以在端口 8000 上启动一个简单的 HTTP 服务器。

    python -m http.server 8000

    如果你已经安装了 Python 2.x,请运行 python -m SimpleHTTPServer 8000

  2. 现在,运行一个容器,安装 curl,并尝试使用以下命令连接到主机:

    console 复制代码
    $ docker run --rm -it alpine sh
    # apk add curl
    # curl http://host.docker.internal:8000
    # exit

从主机连接到容器

端口转发适用于 localhost--publish-p-P 都可以使用。从 Linux 暴露的端口会被转发到主机。

我们建议你发布一个端口,或者从另一个容器连接。这是你需要做的,即使在 Linux,如果容器在覆盖网络上,而不是桥接网络上,因为这些没有路由。

例如,要运行 nginx 网络服务器:

console 复制代码
$ docker run -d -p 80:80 --name webserver nginx

为了阐明语法,以下两个命令都将容器的端口 80 发布到主机的端口 8000

console 复制代码
$ docker run --publish 8000:80 --name webserver nginx

$ docker run -p 8000:80 --name webserver nginx

要发布所有端口,请使用 -P 标志。例如,以下命令启动一个容器(在分离模式下),-P 标志将容器的所有暴露端口发布到主机上的随机端口。

console 复制代码
$ docker run -d -P --name webserver nginx

或者,你也可以使用主机网络,让容器直接访问主机的网络堆栈。

有关与 docker run 一起使用的发布选项的更多详细信息,请参阅 run 命令的文档。

相关推荐
中屹指纹浏览器44 分钟前
指纹浏览器抗检测进阶:绕过深度风控的技术实践
服务器·网络·经验分享·笔记·媒体
wu_huashan1 小时前
环路造成的IP/MAC地址漂移说明
网络·yersinia攻击·ip地址漂移·mac地址漂移
一条懒鱼6661 小时前
K8S-特殊容器
云原生·容器·kubernetes
txzz88882 小时前
网络应用netstart命令
网络·windows·计算机网络·microsoft
网安小白的进阶之路3 小时前
B模块 安全通信网络 第二门课 核心网路由技术-1-OSPF之特殊区域
网络·安全
JZZC23 小时前
33.PPP——CHAP认证
网络
求梦8204 小时前
Java:Windows家庭中文版的Docker下载安装
java·windows·docker
❀͜͡傀儡师4 小时前
docker一键部署Flatnotes笔记工具
笔记·docker·容器
一条咸鱼¥¥¥4 小时前
【运维经济】思科交换机和路由器的密码重置方法
运维·网络·智能路由器
zbtlink4 小时前
企业级路由器搬回家?先看利弊,再下决定
网络·智能路由器