Set static IP addresses for docker containers

Source: Internet
Author: User
Tags docker ps

This article has been published by the author yuan Huan to authorize the Netease cloud community.

Welcome to the Netease cloud community to learn more about the operation experience of Netease technology products.


Create a docker container

Docker run-it -- name = YH-h yh -- Net = none Debian: sshd bash ### ensure that the -- Net = none parameter is used, and no Nic is created in the newly created container.

Docker PS

Log on to the container and check the IP address. The eth0 Nic is not found:


[Email protected]:/# ifconfig-
Lo link encap: local loopback
Inet ADDR: 127.0.0.1 mask: 255.0.0.0
Inet6 ADDR: 1/128 scope: Host
Up loopback running MTU: 65536 Metric: 1
RX packets: 0 errors: 0 dropped: 0 overruns: 0 frame: 0
TX packets: 0 errors: 0 dropped: 0 overruns: 0 carrier: 0
Collisions: 0 txqueuelen: 0
RX Bytes: 0 (0.0 B) TX Bytes: 0 (0.0 B)

 

Centos6.6 upgrade iproute

The host machine is centos6.6. To support the IP netns command, you need to upgrade it:

Rpm-IVH http://www.elrepo.org/elrepo-release-6-6.el6.elrepo.noarch.rpm

Yum -- enablerepo = elrepo-kernel install kernel-lt-y ### upgrade the kernel

VI/etc/grub. conf ### modify default = 0. The new kernel is started by default.

Reboot ### restart to make the new kernel take effect

Uname-r ### check whether the kernel version is new

Yum install-y http://rdo.fedorapeople.org/rdo-release.rpm ### update rdo Repository
Vim/etc/yum. Repos. d/rdo-release.repo ### modify the file content as follows

[Openstack-Juno]
Name = openstack Juno Repository
Base url = http://repos.fedorapeople.org/repos/openstack/openstack-icehouse/epel-6/
Enabled = 1
Skip_if_unavailable = 0
Gpgcheck = 0
Gpgkey = file: // etc/pki/rpm-GPG-key-rdo-Juno

 

Yum -- enablerepo = openstack-Juno install iproute ### update iproute
Rpm-Q iproute


Set static IP

Create a script modify_docker_ip.sh to modify the static IP address. The content is as follows:


#/Bin/baslif [-Z $1] | [-Z $2] | [-Z $3] | [-Z $4] | [-z $5]; thenecho "Usage: $0 containerid/container_name IP mask gateway ethname" Echo "Call the script like: Sh unzip b0e18b6a4432 192.168.5.123 24 192.168.5.1 deth0" Echo "Call the script like: sh manual_con_static_ip.sh my_container 192.168.5.123 24 192.168.5.1 deth0 "exitfi containerid_name = $1 setip = $2 setmask = $3 Gateway = $4 ethname = $5 # determine whether the host machine Nic has ifconfig $ ethname>/dev/null 2> & 1if [$? -EQ 0]; then read-P "$ ethname exist, do you want delelte it? Y/N "del if [[$ del = 'y']; then IP link del $ ethname else exit Fifi # pid = 'docker inspect-F '{{. state. PID} '$ containerid_name' echo pid = $ pidmkdir-P/var/run/netnsfind-L/var/run/netns-type L-Delete if [-F/var/ run/netns/$ pid]; then Rm-F/var/run/netns/$ pidfiln-S/proc/$ PID/ns/NET/var/run/netns/$ pid # IP link add $ ethname type veth peer name bbrctl addif docker0 $ ethnameip link set $ ethname upip link set B netns $ pid # Delete the existing eth0ip netns exec $ PID IP link del eth0>/dev/ null 2> & 1 # set the new container Nic eth0ip netns exec $ pid ip link set Dev B Name eth0ip netns exec $ PID IP link set eth0 upip netns exec $ PID IP ADDR add $ setip/$ setmask Dev eth0ip netns exec $ pid ip Route add default via $ Gateway


Run the following command on the host machine to create a NIC for the container and assign a static IP Address:

./Modify_docker_ip.sh 8feff00a0a26 172.17.0.2 16 172.17.42.1 deth0

Where: 8feff00a0a26 is the container ID, 172.17.0.2 is the static IP address of the container, 16 is the mask, 172.17.42.1 is the container gateway address (that is, the IP address of docker0 in the operating container system ), deth0 is the name of the newly created host network card (corresponding to the eth0 in the container)

View the Host IP Address:

[[Email protected] ~] # Ifconfig
Deth0 link encap: Ethernet hwaddr da: 19: 96: 9B: 1b: E5
Inet6 ADDR: fe80: d819: 96ff: fe9b: 1be5/64 scope: Link
Up broadcast running Multicast MTU: 1500 Metric: 1
RX packets: 6 errors: 0 dropped: 0 overruns: 0 frame: 0
TX packets: 6 errors: 0 dropped: 0 overruns: 0 carrier: 0
Collisions: 0 FIG: 1000
RX Bytes: 468 (468.0 B) TX Bytes: 468 (468.0 B)

Docker0 link encap: Ethernet hwaddr 56: 84: 7A: Fe: 97: 99
Inet ADDR: 172.17.42.1 bcast: 0.0.0.0 mask: 255.255.255.0.0
Inet6 ADDR: fe80: 5484: 7aff: Fefe: 9799/64 scope: Link
Up broadcast running Multicast MTU: 1500 Metric: 1
RX packets: 12 errors: 0 dropped: 0 overruns: 0 frame: 0
TX packets: 6 errors: 0 dropped: 0 overruns: 0 carrier: 0
Collisions: 0 txqueuelen: 0
RX Bytes: 768 (768.0 B) TX Bytes: 468 (468.0 B)

View the IP address in the container:

[Email protected]:/# ifconfig-
Eth0 link encap: Ethernet hwaddr 22: E1: 72: 17: B6: dd
Inet ADDR: 172.17.0.2 bcast: 0.0.0.0 mask: 255.255.255.0.0
Inet6 ADDR: fe80: 20e1: 72ff: fe17: b6dd/64 scope: Link
Up broadcast running Multicast MTU: 1500 Metric: 1
RX packets: 3 errors: 0 dropped: 0 overruns: 0 frame: 0
TX packets: 3 errors: 0 dropped: 0 overruns: 0 carrier: 0
Collisions: 0 FIG: 1000
RX Bytes: 238 (238.0 B) TX Bytes: 238 (238.0 B)

Lo link encap: local loopback
Inet ADDR: 127.0.0.1 mask: 255.0.0.0
Inet6 ADDR: 1/128 scope: Host
Up loopback running MTU: 65536 Metric: 1
RX packets: 0 errors: 0 dropped: 0 overruns: 0 frame: 0
TX packets: 0 errors: 0 dropped: 0 overruns: 0 carrier: 0
Collisions: 0 txqueuelen: 0
RX Bytes: 0 (0.0 B) TX Bytes: 0 (0.0 B)


Appendix:

Docker for the network of this document see: https://docs.docker.com/articles/networking/

Another tool, pipework, can also set static IP: https://github.com/jpetazzo/pipework


Legacy problems:

Problem: After the docker container is restarted, eth0 disappears and the IP address becomes invalid.

Description: docker automatically clears the NIC configuration when the container is stopped. After the restart, the eth0 in the container disappears and the static IP address becomes invalid.

Solution: 1. Run a docker container and re-execute the script or pipework in the text to reset the IP address. 2. There may be a better way to study.


Netease cloud Container Service provides users with serverless containers, allowing enterprises to quickly deploy services and easily maintain services. Container Service supports auto scaling, vertical resizing, phased upgrade, service discovery, service orchestration, error recovery, and performance monitoring.


Free trial of cloud security (yundun) content security, verification code and other services

For more information about Netease technologies, products, and operations, click.




Related Articles:
[Recommendation] reliability of Distributed Storage System Series 1: how to estimate

Set static IP addresses for docker containers

Contact Us

The content source of this page is from Internet, which doesn't represent Alibaba Cloud's opinion; products and services mentioned on that page don't have any relationship with Alibaba Cloud. If the content of the page makes you feel confusing, please write us an email, we will handle the problem within 5 days after receiving your email.

If you find any instances of plagiarism from the community, please send an email to: info-contact@alibabacloud.com and provide relevant evidence. A staff member will contact you within 5 working days.

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.