Docker容器IP访问容器服务

Windows宿主机如何访问连接虚拟机中的Docker容器 在学习docker部署flask项目,发现在window本地不能访问docker。虚拟机的通信可以使用多种方式,本文中使用了nat。​ 成功访问到docker。 阅读详情

前言

使用 Docker 搭建了一些服务,每一次新增服务,都需要在 nginx 的容器做一些操作。

于是乎,就探究探究能不能直接通过 容器IP+端口 来访问容器中的服务。

环境

  • Windows
  • Hyper-V
  • Ubuntu 20.04(虚拟机)
  • docker
  • docker-compose

准备工作

若容器是在虚拟机内,则需要先固定虚拟机的 IP。

关于 Hyper-V 的虚拟机 IP 固定操作可以参考 Hyper-V固定虚拟机IP;

docker-compose.yml 编写注意点

为了能够保证每次容器获取到的 IP 都是固定的,所以需要定义网段和为每个容器指定 IP

demo 如下:

version: "3"
services:
    mysql:
        image: mysql:8
        command: --default-authentication-plugin=mysql_native_password
        environment:
            - MYSQL_PASSWORD=123456
            - MYSQL_ROOT_PASSWORD=123456
        container_name: mysql
        restart: always
        networks:
            default:
                ipv4_address: 172.19.0.1
    redis:
        image: redis:6.2.2-alpine
        ports: 
            - "6379:6379"
        volumes:
            - ./redis/data:/data
        container_name: redis
        restart: always
        networks:
            default:
                ipv4_address: 172.19.0.2
    php56:
        image: php:5.6-fpm-alpine
        environment:
            TZ : 'Asia/Shanghai'
        restart: always
        container_name: php5.6
        networks:
            default:
                ipv4_address: 172.19.0.56
    php73:
        image: php:7.3.18-fpm-alpine
        environment:
            TZ : 'Asia/Shanghai'
        restart: always
        container_name: php5.6
        networks:
            default:
                ipv4_address: 172.19.0.73
networks:
    default:
        ipam:
            config:
            - subnet: 172.19.0.0/16

这个时候,若是 Linux 环境,是可以直接通过 IP 访问容器了。

容器IP通过虚拟机路由到宿主机

虚拟机开启路由转发

sudo sed -i 's!#net.ipv4.ip_forward=1!net.ipv4.ip_forward=1!g' /etc/sysctl.conf
sudo sysctl -p /etc/sysctl.conf
sudo iptables -P FORWARD ACCEPT

windows开启路由转发

  1. 获取虚拟机的IP
ifconfig eth0

结果如下(192.168.137.128):

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 192.168.137.128  netmask 255.255.255.0  broadcast 192.168.137.255
        inet6 fe80::215:5dff:fe2a:9b0a  prefixlen 64  scopeid 0x20<link>
        ether 00:15:5d:2a:9b:0a  txqueuelen 1000  (Ethernet)
        RX packets 812947  bytes 916704076 (916.7 MB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 481002  bytes 77532801 (77.5 MB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
  1. windows上通过 powershell 查看路由表
route print 172.19.0.0

结果如下(路由表没数据):

===========================================================================
接口列表
 12...00 15 5d 2a 9b 09 ......Hyper-V Virtual Ethernet Adapter #2
 14...e4 54 e8 c4 ad fc ......Realtek PCIe GbE Family Controller
  1...........................Software Loopback Interface 1
 25...00 15 5d 6c 85 b7 ......Hyper-V Virtual Ethernet Adapter
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
  无
永久路由:
  无

IPv6 路由表
===========================================================================
活动路由:
  无
永久路由:
  无
  1. windows使用管理员权限打开 powershell 添加路由表
# 下面的命令是添加永久路由的,若不需要添加永久路由,可以去掉 -p
# 172.19.0.0 是虚拟机中Docker的IP段
# 255.255.255.0 写死就好
# 192.168.137.128 是虚拟机的IP
route add -p 172.19.0.0 mask 255.255.255.0 192.168.137.128
  1. windows再次查看路由表
===========================================================================
接口列表
 12...00 15 5d 2a 9b 09 ......Hyper-V Virtual Ethernet Adapter #2
 14...e4 54 e8 c4 ad fc ......Realtek PCIe GbE Family Controller
  1...........................Software Loopback Interface 1
 25...00 15 5d 6c 85 b7 ......Hyper-V Virtual Ethernet Adapter
===========================================================================

IPv4 路由表
===========================================================================
活动路由:
网络目标        网络掩码          网关       接口   跃点数
       172.19.0.0    255.255.255.0  192.168.137.128    192.168.137.1     16
===========================================================================
永久路由:
  网络地址          网络掩码  网关地址  跃点数
       172.19.0.0    255.255.255.0  192.168.137.128       1
===========================================================================

IPv6 路由表
===========================================================================
活动路由:
  无
永久路由:
  无

完成

最后

再也不用担心新增/修改服务时,影响其他服务了。

从Harbor实战看Docker IPv6:为什么配置了IP6tables,容器服务还是访问不了? 本文深入探讨了Docker IPv6配置中的常见问题,特别是在Harbor私有镜像仓库部署时遇到的IPv6访问失败问题。通过分析Docker网络栈的多层级配置,包括协议栈监听、端口转发机制和Nginx配置,提供了从基础配置到高级调试的完整解决方案,帮助开发者实现真正的IPv6全栈支持。 阅读详情

相关推荐

Python爬虫实战:西瓜视频m3u8解析与FFmpeg下载合并

网络爬虫与流媒体解析是Python工程实践中的常见需求,其核心在于通过HTTP请求获取数据并解析特定格式。m3u8作为HLS协议索引文件,将视频切分为ts分片,便于流式传输。结合FFmpeg的多线程处理能力,可高效完成分片下载与合并,技术价值在于提升视频处理效率。典型应用场景包括视频下载、离线缓存等。本文以西瓜视频为例,详细讲解如何使用requests库提取m3u8地址,并调用FFmpeg批量下载ts分片合并为mp4,涵盖请求伪装、索引解析及常见问题排查。

weixin_31856057的博客 15万+

Docker容器与宿主机相互访问

从图中可看见,192.168.99.1就是docker的虚拟网卡ip,使用Docker desktop启动的docker就是如图的适配器名称,使用Docker toolbox部署的docker,网卡适配器名称是VirtualBox。作者踩的坑:我自己在度娘里遨游的时候,找到了两种方法,一个是建立一个容器网络network,将容器放入这个容器网络中,这种方式只能实现容器与容器直接的快速交互, 若用docker虚拟网卡ip其实也可以互相访问,没必要建立容器网络。

尽我所能,分享开发问题的解决方式 6376

VASP+Multiwfn+VMD静电势计算与可视化全流程解析

静电势是表征分子与材料表面电荷分布的关键物理量,它通过求解泊松方程,将电子密度与原子核电荷在空间中的贡献结合起来,直观揭示体系的电子富集与缺失区域。这一性质在理解化学反应活性、分子间相互作用(如氢键、卤键)以及材料表面性质方面具有重要价值。在计算材料科学与量子化学领域,基于第一性原理计算获得高精度电子结构数据后,如何将其转化为可直观分析的静电势图,是连接理论计算与物理解释的关键技术环节。本文聚焦于构建一条高效、可控的端到端工作流,详细解析如何利用VASP进行高精度电子密度计算,通过专业波函数分析软件Mult

weixin_33733810的博客 431

docker 容器无法通过 IP 访问宿主机

原因:这是因为项目与服务都是通过docker容器运行的,而docker 容器无法通过 IP 访问宿主机(貌似高版本解决了这个问题),所以导致部署到同一机器后出现问题。问题:一次部署项目过程中,将Java项目与中间件服务部署在同一远程机器上,出现连接不上中间件服务的问题,而项目在本地运行时是可以连接的,没有问题。也可以通过在容器运行时 加参数--net=host,这个命令让容器与宿主机共享网络命名空间,这样容器就可以直接使用宿主机的IP地址进行访问。解决:Docker社区有提过该问题已被解决,

shihan175的博客 6259

第十二节:C#工业控制编程基础--输出正弦波实验

第十二节:基于c#使用开发板输出正弦波实验 文章目录第十二节:基于c#使用开发板输出正弦波实验一、实验目的:了解采集卡DA相关函数的使用。二、实验内容:利用C#生成正弦波,然后用采集卡DA输出。三、实验步骤:1.打开Visual Studio 2013,新建窗体应用程序项目,配置好板卡dll文件。2.在窗体中放入控件,对控件进行布局排版,并修改他们的Name属性和Text属性。3.在Chart控件内选择Spline型图表,如图2。4.进入编程区域,在public partial class Form1 :

weixin_49237052的博客 2296

机械臂 关节电机选型计算

电机 机械臂

hisen92的专栏 8983

Nginx中获取真实ip地址问题

nginx的realip模块可以解决这种多网关层获取真实ip地址问题。

fxtxz2的专栏 5335

Robocup 仿真2D 学习笔记(二) 球队代码编译和上场

环境的一些问题 最近在使用rcssserver 和 rcssmonitor时可能会遇到./configure失败的问题,可以检查一下文件夹是否有makefile文件,如果是编译后的包直接sudo make install,如果还不行,还可以源码下载编译 rcssserver: https://sourceforge.net/projects/sserver/files/rcssserver/...

markchalse的博客 6014

【超保姆级教程】公网ip太难搞了,服务器还卖的贼贵,本地Docker安装Centos7.9并设置Zerotier组局域网满足日常管理,使用Frp内网穿透使得公网可以直接访问

使用的SSH工具XTerminal,公网ip太难搞了,服务器还卖的贼贵,本地Docker安装Centos7.9并设置Zerotier组局域网满足日常管理,使用Frp内网穿透使得公网可以直接访问公网服务器推荐雨云,主打的就是一个便宜好用,因为咱只是想要一个公网ip,服务都搭建在本地,找最便宜的就行。这套教程搭建下来有个演示,效果你们可以自己看看能不能达到要求。

qq_29094513的博客 1670

手把手教你用GEM-2多频电磁仪找地下管道(附真实数据图)

本文详细解析了使用GEM-2多频电磁仪精准定位地下管线的全流程,包括设备调试、频率选择、现场扫描技巧及数据解读。通过真实案例展示了如何应对复杂干扰环境,提升管线检测效率与准确性,特别适合市政工程和地下管线普查。

weixin_42565652的博客 397

Localizing LabVIEW Application to Different Languages

本文探讨了LabVIEW应用程序的多语言本地化实现方案。文章首先分析了LabVIEW对多语言的支持现状,指出其默认仅支持ANSI编码,对Unicode支持有限,且仅适配中英法德日韩六种语言。然后重点介绍了JKISimpleLocalization工具包的使用方法,该工具能导出/导入JSON词典文件,实现界面语言的实时切换。文章还结合实际工程案例,分析了该方案的局限性:部分控件不可翻译、切换速度较慢(33个界面需50秒)、小语种支持不足等。最后提供了完整的应用流程和工具包附件,包括词典文件转换工具和工程案例。

2301_80383260的博客 1409

WSL2 + Docker 环境无法通过局域网IP访问容器服务及Burp抓包问题

本次故障系 WSL2 特殊的网络地址转换(NAT)机制导致 Windows 宿主机无法将局域网 IP 请求路由至 WSL2 内部,通过。

m0_56318237的博客 306

Simulink开发项1000例实战专栏--实例17:基于 Simulink 的 BLDC 电机驱动系统的设计与实现

项目背景无刷直流电机(BLDC)因其高效、可靠、低维护的特点,广泛应用于电动汽车、无人机、工业自动化等领域。基于 Simulink 的 BLDC 电机驱动系统可以实现对电机的精确控制,包括速度控制、位置控制和转矩控制。通过仿真和测试,可以优化控制算法,提高系统的性能和可靠性。

xiaoheshang_123的博客 562

wsl2镜像网络模式下docker容器服务无法通过局域网ip访问

WSL2镜像网络模式下Docker容器服务无法通过局域网IP访问,通常是因容器未绑定到 0.0.0.0 或Windows防火墙拦截引起。解决此问题的核心在于:在 .wslconfig 启用镜像网络与固定IP,并确保Docker服务监听所有网卡。以下是分步解决方案:1. 配置 WSL2 镜像网络 (.wslconfig)在您的Windows用户主目录(通常是 C:\Users\用户名\)下创建或编辑 .wslconfig 文件,添加以下内容以确保网络镜像生效,并允许局域网访问:ini[wsl2]

小董同学西北民族 361

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

解决从局域网访问Windows WSL2 Docker容器服务被拒绝的问题

摘要:解决WSL2中Docker容器服务无法被局域网访问的问题,需检查:1)Docker端口映射是否包含0.0.0.0;2)服务是否监听0.0.0.0而非127.0.0.1;3)在Windows设置端口转发(netsh命令);4)防火墙放行端口。注意WSL2的IP会变化,需管理员权限操作,重启后可能需要重新配置转发规则。关键步骤:修改服务配置、获取WSL2动态IP、设置端口转发和防火墙规则。(147字)

weixin_44093752的博客 1926

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

docker 容器的网络设置

  创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头。 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器的ip地址。 假设某个容器(假设容器的名称为myweb)被分配的地址是 172.17.0.2,该容器上启动了一个web服务,其端口号是80(注意这是容器中的端口号)。 这时我们用docke...

thedarkclouds的博客 1295

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

docker for windows 容器和宿主机 ip互通

Docker官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用。一般过程是: 1、Docker进程通过监听宿主机的某个端口,将该端口的数据包发送给Docker容器 2、宿主机可以打开防火墙让局域网其他设备通过访问宿主机的端口进而访问docker的端口 但在实际使用中并不是很方便。 以下在win10环境中队DockerDocker容器通过独立IP暴露给局...

qq_33668030的博客 1万+

docker设置iptables=false后容器内部无法互相访问

本文介绍了在CentOS7中解决Docker端口映射问题的方案。当禁用Docker的iptables后,容器间通信中断的问题可通过以下步骤解决:1)修改docker.service添加--iptables=false参数;2)在/etc/docker/daemon.json中配置固定IP网段(如172.23.0.0/16);3)使用firewall-cmd将Docker网段加入防火墙白名单。该方法既保证了容器间正常通信,又能通过firewalld管理端口安全,避免Docker自动开放所有映射端口的安全隐患。

PengDQ12的博客 1024

通过独立IP访问docker for windows 容器内网

https://www.cnblogs.com/brock0624/p/9788710.html

qq_37797234的博客 660

docker 容器间网络配置

创建一个docker容器,docker系统会自动为该容器分配一个ip地址,通常是172.17开头。 我们可以在主机上用 docker inspect 命令 或者进入容器用ifconfig命令来查看容器的ip地址。 假设某个容器(假设容器的名称为myweb)被分配的地址是 172.17.0.2,该容器上启动了一个web服务,其端口号是80(注意这是容器中的端口号)。 这时我们用docker p...

weixin_33842328的博客 110

Windows宿主机无法通过IP访问Docker Desktop里的容器

通过docker子网固定容器IP # 查看局域网 docker network list #自定义局域网 docker network create --subnet=172.168.0.0/16 mynet # 查看详细信息 docker network inspect mynet # 删除 docker network rm mynet # 启动容器 docker run --network=mynet --ip=172.168.0.2 -p 6379:6379 --name redisNode1

weixin_40845192的博客 5814

docker创建容器时指定容器ip,实现远程访问容器

docker创建容器时默认采用bridge网络,自行分配ip,不允许自己指定; 在实际部署中,我们需要指定容器ip,不允许其自行分配ip,尤其是搭建集群时,固定ip是必须的。 查看网络模式,docker network ls 我们可以创建自己的bridge网络:yinong;创建容器的时候指定网络为yinong并指定ip即可; 创建一个新的bridge网络; docker network c...

weixin_44732155的博客 450

docker 容器固定ip

实验环境: OS: ubuntu server 14.04 docker version: 1.12.1 Host ip: 192.168.5.158 Host2 ip: 192.168.5.47 (安装最新版docker ,参照:https://docs.docker.com/engine/installation/linux/ubuntulinux/ )本方法是使用network

tzm1921995的博客 8191

docker for windows 容器内网通过独立IP直接访问的方法

Docker官方推荐我们通过端口映射的方式把Docker容器的服务提供给宿主机或者局域网其他容器使用。一般过程是: 1、Docker进程通过监听宿主机的某个端口,将该端口的数据包发送给Docker容器 2、宿主机可以打开防火墙让局域网其他设备通过访问宿主机的端口进而访问docker的端口 但在实际使用中并不是很方便。 以下在win10环境中队DockerDocker容器通过独立IP暴露给局...

weixin_30767921的博客 1468

docker容器端口篇

一个宿主机的docker容器创建成功后,如果需要向外提供服务,需要把自身提供服务的端口暴露出来,docker容器暴露端口的形式有四种:1、-p <containerPort> 将指定的容器端口映射到宿主机所有地址的一个随机端口2、-p <hostPort>:<containerPort> 将容器端口映射到指定的主机端口3、-p <ip>::<c...

weixin_33676492的博客 5755
上一篇: Hyper-V固定虚拟机IP
下一篇: Ubuntu使用dnsmasq自建dns服务
IMJCW
博客等级 码龄10年 13粉丝 58原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值