DockerHow toLinux

Enable IPv6 in Docker container and compose

Enabling IPv6 in Docker Settings.

What’s Docker

Docker stands as a groundbreaking containerization platform that has dramatically streamlined the lifecycle of developing, deploying, and managing applications. By encapsulating applications in lightweight, transportable containers, Docker ensures consistency and efficiency, regardless of the environment it operates in. This universality makes Docker an indispensable tool for developers aiming to build and scale applications swiftly and reliably across various computing environments, from personal computers to cloud-based servers. Its ability to isolate applications in containers also significantly boosts security and simplifies dependency management, making the development process more manageable and predictable.

What’s IPv6

IPv6 represents the next generation of Internet Protocol (IP) addressing, designed to overcome the limitations of its predecessor, IPv4, primarily the issue of address exhaustion. With its vast address space, IPv6 not only provides an almost unlimited number of unique IP addresses but also introduces several improvements in routing and network autoconfiguration, enhancing internet security and performance. Embracing IPv6 is essential for ensuring that devices and services on the internet remain accessible and secure as the global demand for IP addresses continues to grow, especially in the burgeoning age of IoT (Internet of Things) devices.


The integration of IPv6 into Docker containers and compositions signifies a pivotal advancement in the field of containerized application development and deployment. Docker’s seamless environment for container management, combined with IPv6’s expansive network capabilities, offers developers and organizations an unparalleled level of efficiency, scalability, and security. While Docker encapsulates and manages the lifecycle of applications in a consistent manner across different platforms, IPv6 ensures these applications are ready for the future of internet connectivity, with its vast address space and enhanced functionalities. Together, Docker and IPv6 pave the way for a more robust, scalable, and secure approach to modern networking and application development, ensuring that businesses and services can thrive in the ever-evolving digital landscape.

How to Enable IPv6 in Docker

Requirements

  • Make sure the Docker servise up and running
  • Enable IP Forwarding
  • IPv6 Local Range IP, e.g: fd12:3456:789a:1::/64

Prepara

# Enable IP Forwarding and stuff
vim /etc/sysctl.conf

# Append like these
net.ipv4.ip_forward = 1
net.ipv6.conf.eth0.proxy_ndp = 1
net.ipv6.conf.all.accept_ra = 2
net.ipv6.conf.default.forwarding = 1
net.ipv6.conf.all.forwarding = 1

# Apply sysctl.conf
sysctl -p

# Stop Docker service
systemctl stop docker docker.socket

Enable in daemon config

tee /etc/docker/daemon.json >/dev/null <<EOF
{
  "ipv6": true,
  "fixed-cidr-v6": "fd12:3456:789a:1::/64",
  "experimental": true,
  "ip6tables": true,
  "iptables": true
}
EOF

systemctl start docker

Create IPv6 Docker network

docker network create --subnet=172.90.2.0/24 --gateway=172.90.2.1 --ipv6 --subnet="fd12:3456:789a:2::/112" --driver bridge net_apps

Run Docker Container with IPv6

# Create Container
docker run -d --name apps --network net_apps nginx:alpine

# Login to Container
docker exec -it apps sh

# Test to ping via IPv6
$ ping6 -c3 blackonsole.org
PING blackonsole.org(2606:4700:3037::6815:ac2 (2606:4700:3037::6815:ac2)) 56 data bytes
64 bytes from 2606:4700:3037::6815:ac2 (2606:4700:3037::6815:ac2): icmp_seq=1 ttl=57 time=2.08 ms
64 bytes from 2606:4700:3037::6815:ac2 (2606:4700:3037::6815:ac2): icmp_seq=2 ttl=57 time=1.73 ms
64 bytes from 2606:4700:3037::6815:ac2 (2606:4700:3037::6815:ac2): icmp_seq=3 ttl=57 time=0.887 ms

--- blackonsole.org ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2004ms
rtt min/avg/max/mdev = 0.887/1.566/2.078/0.500 ms

IPv6 in Docker Compose

# Create Docker compose file
vim docker-compose.yml

# Content of docker-compose
---
services:
  apps:
    name: apps
    image: nginx:alpine
  networks:
    - net_apps

networks:
  net_apps:
    external: true
  
# Run Docker Compose
# Foreground
docker compose up 

# OR

# Background
docker compose up -d

Reference

  • https://docs.docker.com/compose/gettingstarted/
  • https://docs.docker.com/engine/reference/run/#container-networking
  • https://docs.docker.com/config/daemon/ipv6/

You might be interested in learning more about the fundamentals of containerization and its impact on application development. Speaking of Docker, you can explore its transformative role in modern software deployment by checking out the article on Containerization. Additionally, if you’re curious about the future of internet connectivity, the article on IPv6 provides a comprehensive overview of its vast address space and enhanced functionalities. These resources will deepen your understanding of how these technologies shape the digital landscape.

Hi, I’m Sysadmin.ID

Leave a Reply

Your email address will not be published. Required fields are marked *