Docker实例:创建一个点到点连接

默认情况下,Docker 会将所有容器连接到由 docker0 提供的虚拟子网中。

用户有时候需要两个容器之间可以直连通信,而不用通过主机网桥进行桥接。

解决办法很简单:创建一对 peer 接口,分别放到两个容器中,配置成点到点链路类型即可。

首先启动 2 个容器:

$ sudo docker run -i -t --rm --net=none base /bin/bash
[email protected]:/#
$ sudo docker run -i -t --rm --net=none base /bin/bash
[email protected]:/#

找到进程号,然后创建网络名字空间的跟踪文件。

$ sudo docker inspect -f ‘{{.State.Pid}}‘ 1f1f4c1f931a
2989
$ sudo docker inspect -f ‘{{.State.Pid}}‘ 12e343489d2f
3004
$ sudo mkdir -p /var/run/netns
$ sudo ln -s /proc/2989/ns/net /var/run/netns/2989
$ sudo ln -s /proc/3004/ns/net /var/run/netns/3004

创建一对 peer 接口,然后配置路由

$ sudo ip link add A type veth peer name B

$ sudo ip link set A netns 2989
$ sudo ip netns exec 2989 ip addr add 10.1.1.1/32 dev A
$ sudo ip netns exec 2989 ip link set A up
$ sudo ip netns exec 2989 ip route add 10.1.1.2/32 dev A

$ sudo ip link set B netns 3004
$ sudo ip netns exec 3004 ip addr add 10.1.1.2/32 dev B
$ sudo ip netns exec 3004 ip link set B up
$ sudo ip netns exec 3004 ip route add 10.1.1.1/32 dev B

现在这 2 个容器就可以相互 ping 通,并成功建立连接。点到点链路不需要子网和子网掩码。

此外,也可以不指定 --net=none 来创建点到点链路。这样容器还可以通过原先的网络来通信。

利用类似的办法,可以创建一个只跟主机通信的容器。但是一般情况下,更推荐使用 --icc=false 来关闭容器之间的通信。

原文地址:https://www.cnblogs.com/navysummer/p/8455123.html

时间: 2024-10-11 01:59:31

Docker实例:创建一个点到点连接的相关文章

ZeroMQ接口函数之 :zmq_connect - 由一个socket创建一个对外连接

ZeroMQ 官方地址 :http://api.zeromq.org/4-0:zmq_connect zmq_connect(3)  ØMQ Manual - ØMQ/3.2.5 Name zmq_connect - 由一个socket创建一个对外连接(outgoing connection) Synopsis int zmq_connect (void *socket, const char *endpoint); Description zmq_connect()函数将socket连接到节点

docker 简单创建一个tomcat服务

上一篇已经介绍了docker相关的基本命令,这篇我们来详细介绍下通过docker如何创建一个toncat应用容器.方法一:如果不想自己搭建tomcat应用容器的话,可以直接在Docker Hub上直接search tomcat ,如下图:docker search tomcat可以看到有好多的内容,如果搜索结果显示有相关镜像,则可以直接通过 docker pull tomcat 来下载 tomcat镜像.docker pull tomcat 当提示下载完毕时,我们可以通过docker image

Java中通过方法创建一个http连接并请求

1.Java代码创建一个连接并请求该连接返回的数据 doGet()方法,execute()方法中调用 package demo2.x.com; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.HttpURLConnection; import java.net.URL; import javax.print.attribute.

创建一个实例&创建一个线程。。

1 using System; 2 using System.Threading; 3 4 5 namespace WorkerThread02 6 { 7 class ThreadTest 8 { 9 bool done; 10 static void Main() 11 { 12 ThreadTest tt=new ThreadTest();//创建一个类的实例 13 Thread t=new Thread(WriteY);//创建一个线程. 14 .............. 15 ...

创建一个jdbc连接

本文介绍如何建立一个jdbc连接进行数据库查询操作. 创建一个java工程,导入jar包. 作者使用mysql数据库,建立jdbc连接需要mysql数据库驱动jar包和jdbc连接jar包. 建立jdbc连接过程如下: 1.加载数据库驱动 2.创建并获取数据库连接 3.创建jdbc stattement 对象 4.设置sql语句 5.设置sql语句中的参数 6.通过statement执行sql并获取结果 7.对sql执行结果进行解析处理 8.释放资源 1package com.xyfer; 2.

HTML学习笔记--实例-创建一个注册页面--select两个option出来结果却是四个选项,其中两个空白选项的原因?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-

IOS开发之小实例--创建一个简单的用于视频录制和回放的应用程序

前言:还是看了一下国外的入门IOS文章:<Create a Simple App for Video Recording and Playback>,主要涉及视频录制和回放的功能的基本实现. iOS的API用于记录和播放视频的对刚入门IOS的新人有点混乱,因为有几个可用的选项.如果你只是想打一个视频,你可以用MediaPlayer的框架,它可以让我们发挥我们的设备本地存储的视频,或从远程位置.但是,如果你需要高级功能,如媒体资产管理,媒体编辑,跟踪管理,和其他人,你必须使用AVFoundati

使用docker来创建一个etcd集群

docker run -d --name etcd1 --network etcdnet --ip 172.25.0.101 -p 23791:2379 -e ETCDCTL_API=3 -v /root/etcd:/etcd etcd:my etcd --config-file /etcd/conf/etcd.yml curl http://localhost:23791/v2/members 检查状态 来自为知笔记(Wiz) 原文地址:https://www.cnblogs.com/hual

一步一步创建一个简单的Package(1)

创建Package之前首先我们理解需求: 数据源是一组历史货币数据包含在平面文件SampleCurrencyData.txt中,源数据中有四列. 下面是SampleCurrencyData.txt文件的一组示例数据: 1.00010001 ARS 9/3/2001 0:00 0.99960016 1.00010001 ARS 9/4/2001 0:00 1.001001001 1.00020004 ARS 9/5/2001 0:00 0.99990001 1.00020004 ARS 9/6/2