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 命令的文档。

相关推荐
cssl-虞老师6 小时前
Ubuntu安装Docker
linux·ubuntu·docker
LNTON羚通6 小时前
视频共享融合赋能平台LnyonCVS国标视频监控平台包含哪些功能
大数据·网络·人工智能·算法·音视频
开开心心kai6 小时前
不花钱如何让网站启用HTTPS访问
网络·网络协议·安全·http·https
平安喜乐6166 小时前
探索 SecureCRT:强大的终端 SSH 工具
网络·securecrt·终端 ssh 工具
别JUAN我6 小时前
APP渗透-android12夜神模拟器+Burpsuite实现
网络·安全·web安全·安全性测试
hay_lee7 小时前
一台docker机器如何实现构建多平台镜像
运维·docker·云原生·容器
The Straggling Crow7 小时前
k8s record 20240705
云原生·容器·kubernetes
lendq7 小时前
k8s-第九节-命名空间
linux·容器·kubernetes
文静小土豆7 小时前
K8S 部署 EFK
云原生·容器·kubernetes
香甜可口草莓蛋糕7 小时前
CMS Made Simple v2.2.15 远程命令执行漏洞(CVE-2022-23906)
网络·安全·web安全·网络安全·系统安全·网络攻击模型·安全架构