blob: 7b46747529a7520eb6fe44dd965adb86f40bc721 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
#!/bin/bash
# Creates named container from given image.
#
# $1 - container name
# $2 - image name
#
function create_container {
container_name=$1
image_name=$2
echo "Creating $container_name from $image_name"
docker run -dt --privileged --name=$container_name $image_name
}
# Starts container
# and adds container's network namespace
# to the linux runtime data (/var/run).
#
# $1 - container name
#
# See:
# https://platform9.com/blog/container-namespaces-deep-dive-container-networking/
#
function start_container {
container_name=$1
echo "Starting container $container_name"
# Remove namespace if it was present
ip netns del $container_name
# Start container
docker start $container_name
# Make container's network namespaces accessible using ip netns
pid=$(docker inspect -f '{{.State.Pid}}' $container_name)
ln -s /proc/$pid/ns/net /var/run/netns/$container_name
echo "Container $container_name started sucessfully (pid=$pid)"
}
# Links two containers using a veth pair.
#
# $1 - name of the container A
# $2 - name of the veth endpoint that belongs to A
# $3 - name of the veth endpoint that belongs to B
# $4 - name of the container B
#
function create_link {
container1=$1
if1=$2
if2=$3
container2=$4
echo "Creating link from $container1($if1) to $container2($if2)"
ip link add $if1 type veth peer name $if2
# Move veth endpoints to corresponding namespaces
ip link set $if1 netns $container1
ip link set $if2 netns $container2
# Bring interfaces up
ip netns exec $container1 ip link set $if1 up
ip netns exec $container2 ip link set $if2 up
echo "Link created successfully"
}
|