自学内容网 自学内容网

docker 配置同宿主机共同网段的IP 同时通过通网段的另一个电脑实现远程连接docker

docker配置网络

在这里插入图片描述

#宿主机执行命令
ifconfig 查询对应的主机ip 子网掩码 网关地址
#[网卡名称]:inet[主机IP] netmask[子网掩码] broadcast[网关地址]

这里需要重点关注:eno1[网卡名称]以及【192.168.31.225】网关地址
在这里插入图片描述
在宿主机执行docker命令创建一个虚拟网络虚拟网络与宿主机同网段

docker network create -d macvlan --subnet 192.168.31.0/24 --gateway 192.168.31.1 -o parent=eno1 docker-bridge

这里针对上面的创建做一个解释:

-d macvlan :表示创建一个macvlan的网络,使用macvlan网络驱动
–subnet :[网段]【子网名称】
–gateway :指定宿主机所在的网段的网关
-o parent :继承指定网段的网卡 (这里我的宿主机的网卡是eno1所以 选择eno1为继承网卡)
至此创建了一个名称为docker-bridge的macvlan网络名称
在这里插入图片描述在宿主机端运行docker 创建container容器 并为容器配置IP地址

docker run -it --network=docker-bridge --ip=192.168.31.10 --name=test osrf/ros:humble-desktop-full /bin/bash
#至此创建一个静态IP为192.168.31.10的container容器 外部主机可以通过远程实现访问

想通过外部主机实现docker 远程访问container内部

#需要在docker内部进行ssh 远程服务配置
/etc/init.d/ssh status #检查容器是否有ssh服务
sudo apt-get install openssh-server #安装ssh远程链接
#设置root远程访问权限(**这里需要在PermitRootLogin prohibit-password下添加如下内容**)
sudo vim /etc/ssh/sshd_config
PermitRootLogin yes
RSAAuthentication yes
PubkeyAuthentication yes
按esc :wq!保存后
#配置容器的用户密码
passwd

#设置开机自启动
sudo systemctl enable ssh
sudo vim /root/.bashrc
在.bashrc末尾添加如下代码
service ssh start 保存

在外部宿主机进行ping 然后ssh远程访问
在这里插入图片描述
外部主机配置参考
windows 主机 ipconfig的连接网段为192.168.31.95
跟docker container test处于同一个局域网IP内

ping 192.168.31.10
#能够成功接收到回传包数据
ssh root@192.168.31.10 -p 22 #其中22为容器暴露的外部端口
#上图为成功进入docker 容器内部实现window 进入 linux宿主机内部的docker 进行直接通信

参考链接
参考连接
参考链接
参考链接

问题在宿主机不能ping同处在同局域网段的docker container

基础环境:linux 20.04 ip 为有线连接 ip:192.168.31.105
container配置的ip为192.168.31.10
是现在宿主机内部ping同其docker容器
问题:
在这里插入图片描述
解决方法:外部机器能ping通容器,但是宿主机无法ping通,这是因为macvlan的原因,还需要进行以下步骤

#添加一个虚拟网卡 并桥接到物理网卡上 因为上面配置有一个docker-bridge的网桥 所以 
sudo ip link add macvlan-proxy link eno1 macvlan mode bridge
#主要就是创建一个macvlan-proxy的虚拟网卡 通过bridge 桥接到noa1
#给虚拟网卡配置ip 需要避免ip冲突
#这里window ip 12.168.31.95
#linux ip 192.168.31.195
#板端 ip 192.168.31.67
#docker container test ip 192.168.31.10 
sudo ip addr add 192.168.31.15 dev macvlan-proxy
#启动虚拟网卡
sudo ip link set macvlan-proxy up
#添加路由映射表 ip为container test的ip
sudo ip route add 192.168.31.10 dev macvlan-proxy
#最后成功ping 通同宿主机下docker container在同局域网下的container容器
zhaobojun@zhaobojun:~$ sudo ip link add macvlan-proxy link eno1 type macvlan mode bridge
[sudo] zhaobojun 的密码: 
zhaobojun@zhaobojun:~$ ip addr add 192.168.31.15 dev macvlan-proxy
RTNETLINK answers: Operation not permitted
zhaobojun@zhaobojun:~$ sudo ip addr add 192.168.31.15 dev macvlan-proxy
zhaobojun@zhaobojun:~$ sudo ip link set macvlan-proxy up 
zhaobojun@zhaobojun:~$ ip route add 192.168.31.10 dev macvlan-proxy
RTNETLINK answers: Operation not permitted
zhaobojun@zhaobojun:~$ sudo ip route add 192.168.31.10 dev macvlan-proxy
zhaobojun@zhaobojun:~$ pi
pi1toppm         pidof            pinentry-x11     pip
pi3topbm         pigz             ping             pip3
pic              pinentry         ping4            pivot_root
pico             pinentry-curses  ping6            pixeltool
piconv           pinentry-gnome3  pinky            
zhaobojun@zhaobojun:~$ pin
pinentry         pinentry-gnome3  ping             ping6
pinentry-curses  pinentry-x11     ping4            pinky
zhaobojun@zhaobojun:~$ ping
ping   ping4  ping6  
zhaobojun@zhaobojun:~$ ping 192.168.31.10
PING 192.168.31.10 (192.168.31.10) 56(84) bytes of data.
64 字节,来自 192.168.31.10: icmp_seq=1 ttl=64 时间=0.109 毫秒
64 字节,来自 192.168.31.10: icmp_seq=2 ttl=64 时间=0.075 毫秒
64 字节,来自 192.168.31.10: icmp_seq=3 ttl=64 时间=0.071 毫秒
64 字节,来自 192.168.31.10: icmp_seq=4 ttl=64 时间=0.074 毫秒
64 字节,来自 192.168.31.10: icmp_seq=5 ttl=64 时间=0.077 毫秒
64 字节,来自 192.168.31.10: icmp_seq=6 ttl=64 时间=0.071 毫秒
64 字节,来自 192.168.31.10: icmp_seq=7 ttl=64 时间=0.075 毫秒
64 字节,来自 192.168.31.10: icmp_seq=8 ttl=64 时间=0.063 毫秒
64 字节,来自 192.168.31.10: icmp_seq=9 ttl=64 时间=0.072 毫秒
^C
--- 192.168.31.10 ping 统计 ---
已发送 9 个包, 已接收 9 个包, 0% 包丢失, 耗时 8194 毫秒
rtt min/avg/max/mdev = 0.063/0.076/0.109/0.012 ms

参考连接

sunrise@ubuntu:~$ sudo ip add macvlan-proxy link eno1 macvlan mode bridge
Command "macvlan-proxy" is unknown, try "ip address help".
sunrise@ubuntu:~$ sudo ip add macvlan-proxy link wlan0 macvlan mode bridge
Command "macvlan-proxy" is unknown, try "ip address help".
sunrise@ubuntu:~$ ip link add macvlan-proxy link wlan0 type macvlan mode bridge
RTNETLINK answers: Operation not permitted
sunrise@ubuntu:~$ sudo ip link add macvlan-proxy link wlan0 type macvlan mode bridge
sunrise@ubuntu:~$ sudo ip addr add 192.168.1.60 dev macvlan-proxy
sunrise@ubuntu:~$ ip link set macvlan-proxy up
RTNETLINK answers: Operation not permitted
sunrise@ubuntu:~$ sudo ip link set macvlan-proxy up
sunrise@ubuntu:~$ sudo ip route add 192.168.31.50 dev macvlan-proxy 
sunrise@ubuntu:~$ sudo ip add macvlan-proxy link eno1 macvlan mode bridge
Command "macvlan-proxy" is unknown, try "ip address help".
sunrise@ubuntu:~$ sudo ip add macvlan-proxy link wlan0 macvlan mode bridge
Command "macvlan-proxy" is unknown, try "ip address help".
sunrise@ubuntu:~$ ip link add macvlan-proxy link wlan0 type macvlan mode bridge
RTNETLINK answers: Operation not permitted
sunrise@ubuntu:~$ sudo ip link add macvlan-proxy link wlan0 type macvlan mode bridge
sunrise@ubuntu:~$ sudo ip addr add 192.168.1.60 dev macvlan-proxy
sunrise@ubuntu:~$ ip link set macvlan-proxy up
RTNETLINK answers: Operation not permitted
sunrise@ubuntu:~$ sudo ip link set macvlan-proxy up
sunrise@ubuntu:~$ sudo ip route add 192.168.31.50 dev macvlan-proxy 


原文地址:https://blog.csdn.net/2201_76063234/article/details/143886084

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!