Docker Desktop 上的网络功能

2024-06-22 02:52
文章标签 docker desktop 网络 功能

本文主要是介绍Docker Desktop 上的网络功能,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Docker Desktop 上的网络功能

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

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

VPN直通

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

端口映射

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

$ docker run -p 80:80 -d nginx

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

$ 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 代理套接字:

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

    $ -e SSH_AUTH_SOCK="/run/host-services/ssh-auth.sock"
    

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

services:web:image: nginx:alpinevolumes:- type: bindsource: /run/host-services/ssh-auth.socktarget: /run/host-services/ssh-auth.sockenvironment:- 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,并尝试使用以下命令连接到主机:

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

从主机连接到容器

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

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

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

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

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

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

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

$ docker run -d -P --name webserver nginx

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

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

这篇关于Docker Desktop 上的网络功能的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1083082

相关文章

【Altium】查找PCB上未连接的网络

【更多软件使用问题请点击亿道电子官方网站】 1、文档目标: PCB设计后期检查中找出没有连接的网络 应用场景:PCB设计后期,需要检查是否所有网络都已连接布线。虽然未连接的网络会有飞线显示,但是由于布线后期整板布线密度较高,虚连,断连的网络用肉眼难以轻易发现。用DRC检查也可以找出未连接的网络,如果PCB中DRC问题较多,查找起来就不是很方便。使用PCB Filter面板来达成目的相比DRC

通信系统网络架构_2.广域网网络架构

1.概述          通俗来讲,广域网是将分布于相比局域网络更广区域的计算机设备联接起来的网络。广域网由通信子网于资源子网组成。通信子网可以利用公用分组交换网、卫星通信网和无线分组交换网构建,将分布在不同地区的局域网或计算机系统互连起来,实现资源子网的共享。 2.网络组成          广域网属于多级网络,通常由骨干网、分布网、接入网组成。在网络规模较小时,可仅由骨干网和接入网组成

Windows/macOS/Linux 安装 Redis 和 Redis Desktop Manager 可视化工具

本文所有安装都在macOS High Sierra 10.13.4进行,Windows安装相对容易些,Linux安装与macOS类似,文中会做区分讲解 1. Redis安装 1.下载Redis https://redis.io/download 把下载的源码更名为redis-4.0.9-source,我喜欢跟maven、Tomcat放在一起,就放到/Users/zhan/Documents

Ubuntu20.04离线安装Docker

1.下载3个docker离线安装包,下载网址: https://download.docker.com/linux/ubuntu/dists/xenial/pool/stable/amd64/ 2.把3个离线安装包拷贝到ubuntu本地执行以下命令 sudo dpkg -i containerd.io_1.4.6-1_amd64.deb sudo dpkg -i docker-ce-c

android 免费短信验证功能

没有太复杂的使用的话,功能实现比较简单粗暴。 在www.mob.com网站中可以申请使用免费短信验证功能。 步骤: 1.注册登录。 2.选择“短信验证码SDK” 3.下载对应的sdk包,我这是选studio的。 4.从头像那进入后台并创建短信验证应用,获取到key跟secret 5.根据技术文档操作(initSDK方法写在setContentView上面) 6.关键:在有用到的Mo

android一键分享功能部分实现

为什么叫做部分实现呢,其实是我只实现一部分的分享。如新浪微博,那还有没去实现的是微信分享。还有一部分奇怪的问题:我QQ分享跟QQ空间的分享功能,我都没配置key那些都是原本集成就有的key也可以实现分享,谁清楚的麻烦详解下。 实现分享功能我们可以去www.mob.com这个网站集成。免费的,而且还有短信验证功能。等这分享研究完后就研究下短信验证功能。 开始实现步骤(新浪分享,以下是本人自己实现

Android我的二维码扫描功能发展史(完整)

最近在研究下二维码扫描功能,跟据从网上查阅的资料到自己勉强已实现扫描功能来一一介绍我的二维码扫描功能实现的发展历程: 首页通过网络搜索发现做android二维码扫描功能看去都是基于google的ZXing项目开发。 2、搜索怎么使用ZXing实现自己的二维码扫描:从网上下载ZXing-2.2.zip以及core-2.2-source.jar文件,分别解压两个文件。然后把.jar解压出来的整个c

Toolbar+DrawerLayout使用详情结合网络各大神

最近也想搞下toolbar+drawerlayout的使用。结合网络上各大神的杰作,我把大部分的内容效果都完成了遍。现在记录下各个功能效果的实现以及一些细节注意点。 这图弹出两个菜单内容都是仿QQ界面的选项。左边一个是drawerlayout的弹窗。右边是toolbar的popup弹窗。 开始实现步骤详情: 1.创建toolbar布局跟drawerlayout布局 <?xml vers

利用Frp实现内网穿透(docker实现)

文章目录 1、WSL子系统配置2、腾讯云服务器安装frps2.1、创建配置文件2.2 、创建frps容器 3、WSL2子系统Centos服务器安装frpc服务3.1、安装docker3.2、创建配置文件3.3 、创建frpc容器 4、WSL2子系统Centos服务器安装nginx服务 环境配置:一台公网服务器(腾讯云)、一台笔记本电脑、WSL子系统涉及知识:docker、Frp

Docker启动异常

报错信息: failed to start daemon: Error initializing network controller: error creating default "bridge" network: cannot create network b8fd8c684f0ba865d4a13d36e5282fd694bbd37b243c7ec6c9cd29416db98d4b (d