{"id":42646,"date":"2016-12-21T11:00:08","date_gmt":"2016-12-21T09:00:08","guid":{"rendered":"http:\/\/examples.javacodegeeks.com\/?p=42646"},"modified":"2019-03-29T14:12:08","modified_gmt":"2019-03-29T12:12:08","slug":"docker-container-networking-tutorial","status":"publish","type":"post","link":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/","title":{"rendered":"Docker Container Networking Tutorial"},"content":{"rendered":"<h2>1. Introduction<\/h2>\n<p>In this post, we will learn the basics of Docker container networking in a single host setup. We will see the basic inrastructure provided by the Docker Engine for container networking, the &#8220;Docker network&#8221; family of commands, and the basics of creating user-defined networks. We wil not cover networking with containers in multiple hosts setup here.<\/p>\n<h2>2. Docker networking basics<\/h2>\n<p>Docker provides the basic infrastructure, for networking containers within a single host, out of the box. At installation, Docker creates a virtual Ehternet bridge, called <code>docker0<\/code>, on the host. An ethernet bridge connects two different networks and forwards packets from one connected network to the other. <code>docker0<\/code> does the same task for all network interfaces connected to it. Docker also provides 3 default Docker networks and the infrastructure to create user-defined Docker networks. Lets explore this more.\n<\/p>\n<h3>2.1 Default networks provided by Docker<\/h3>\n<p>Docker creates 3 networks by default &#8211; <code>bridge<\/code>, <code>host<\/code> and <code>none<\/code>. The command <code>docker network ls<\/code> lists them out.<\/p>\n<pre class=\"brush:bash\">$docker network ls\nNETWORK ID          NAME                DRIVER              SCOPE\n81419cac2baf        bridge              bridge              local               \n18e8e68644ea        host                host                local               \n1f87f168df62        none                null                local\n<\/pre>\n<p>The column <em>NETWORK ID<\/em> provides the unique ID given to the network. The column <em>NAME<\/em> provides the name of the network. The column <em>DRIVER<\/em>gives the Docker network driver plugin used. A Docker network driver plugin adapts the networking features of Docker to the host OS&#8217;s networking support. The <em>SCOPE<\/em> column gives the scope of visibility of the networks<\/p>\n<h3>2.2 The Bridge network<\/h3>\n<p>Docker provides the <code>bridge<\/code> network by default. A docker container created on the host is connected to this network by default. The <code>bridge<\/code> network maps to the <code>docker0<\/code> bridge of the host. Lets quickly check this out by creating a container and checking it&#8217;s assigned network.<\/p>\n<pre class=\"brush:bash\">$ docker run --detach infinite-loop-alpine\nceb6846e5d7af370b6b382c258ddc76b03c8b6fc2d04ca4df5c2d17a27aae11f\n$\n$ docker ps --format=\"{{.ID}} {{.Names}}\"\nceb6846e5d7a loving_roentgen\n7f7ef05a21f1 hariharan-private-docker-registry\n$\n$ docker network inspect bridge\n[\n    {\n        \"Name\": \"bridge\",\n        \"Id\": \"81419cac2bafee0c12cba4221b6a5697d9c4cf128259111cc19c6dd6ccfeb28d\",\n        \"Scope\": \"local\",\n        \"Driver\": \"bridge\",\n        \"EnableIPv6\": false,\n        \"IPAM\": {\n            \"Driver\": \"default\",\n            \"Options\": null,\n            \"Config\": [\n                {\n                    \"Subnet\": \"172.17.0.0\/16\",\n                    \"Gateway\": \"172.17.0.1\"\n                }\n            ]\n        },\n        \"Internal\": false,\n        \"Containers\": {\n            \"7f7ef05a21f1476beab8dea21056444ec428add3e0f98206ecc4930208f29572\": {\n                \"Name\": \"hariharan-private-docker-registry\",\n                \"EndpointID\": \"92266572755b163aaa3f32d8e7f81b95a31c9ae5abc161977a241e9c69721bfc\",\n                \"MacAddress\": \"02:42:ac:11:00:02\",\n                \"IPv4Address\": \"172.17.0.2\/16\",\n                \"IPv6Address\": \"\"\n            },\n            \"ceb6846e5d7af370b6b382c258ddc76b03c8b6fc2d04ca4df5c2d17a27aae11f\": {\n                \"Name\": \"loving_roentgen\",\n                \"EndpointID\": \"17c86e7adbfd5035532d0760d5c715a91ee2685c24e58f4777c07504c859583f\",\n                \"MacAddress\": \"02:42:ac:11:00:03\",\n                \"IPv4Address\": \"172.17.0.3\/16\",\n                \"IPv6Address\": \"\"\n            }\n        },\n        \"Options\": {\n            \"com.docker.network.bridge.default_bridge\": \"true\",\n            \"com.docker.network.bridge.enable_icc\": \"true\",\n            \"com.docker.network.bridge.enable_ip_masquerade\": \"true\",\n            \"com.docker.network.bridge.host_binding_ipv4\": \"0.0.0.0\",\n            \"com.docker.network.bridge.name\": \"docker0\",\n            \"com.docker.network.driver.mtu\": \"1500\"\n        },\n        \"Labels\": {}\n    }\n]\n$\n$ docker exec -it loving_roentgen ifconfig\neth0      Link encap:Ethernet  HWaddr 02:42:AC:11:00:03  \n          inet addr:172.17.0.3  Bcast:0.0.0.0  Mask:255.255.0.0\n          inet6 addr: fe80::42:acff:fe11:3%32751\/64 Scope:Link\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:268 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:8 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:46584 (45.4 KiB)  TX bytes:648 (648.0 B)\n\nlo        Link encap:Local Loopback  \n          inet addr:127.0.0.1  Mask:255.0.0.0\n          inet6 addr: ::1%32751\/128 Scope:Host\n          UP LOOPBACK RUNNING  MTU:65536  Metric:1\n          RX packets:0 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)\n<\/pre>\n<p>The command <code>docker network inspect &lt;docker-network-name&gt;<\/code> inspects details of a Docker network. As you can see, a subnet and gateway is already created for <code>bridge<\/code>. The entry <code>\"com.docker.network.bridge.name\": \"docker0\"<\/code> shows that <code>bridge<\/code> is mapped to <code>docker0<\/code>. The new container named <em>loving_roentgen<\/em> was automatically added to the <code>bridge<\/code> network and is allocated the IP <code>172.17.0.3<\/code> from the subnet of IPs reserved for <code>bridge<\/code>.<\/p>\n<p>Finally, when you run the command <code>ifconfig<\/code> within the container you see that there are 2 network interfaces configured &#8211; the loopback interface <code>lo<\/code> and the ethernet interface <code>etho<\/code>.<\/p>\n<h3>2.3 The none network<\/h3>\n<p>The <code>none<\/code> is used to attach a Docker container to a no-network network! This means that the Docker container will have its own network stack but it will not be configured. Containers attached to the <code>none<\/code> network will not have an IP address and will be stand-alone. Lets see an example.<div style=\"display:inline-block; margin: 15px 0;\"> <div id=\"adngin-JavaCodeGeeks_incontent_video-0\" style=\"display:inline-block;\"><\/div> <\/div><\/p>\n<pre class=\"brush:bash\">$ docker run --detach --net=none infinite-loop-alpine\n8ce6015f36de4a2b1d942a23a5799e50109a156c9d2170781f03b4802e4be034\n$\n$ docker ps --format=\"{{.ID}} {{.Names}}\"\n8ce6015f36de adoring_kowalevski\nceb6846e5d7a loving_roentgen\n7f7ef05a21f1 hariharan-private-docker-registry\n$\n$ docker network inspect none\n[\n    {\n        \"Name\": \"none\",\n        \"Id\": \"1f87f168df62320ee4d91b06e79f8bc32204995ae1cdaaaa6b272089299e72e4\",\n        \"Scope\": \"local\",\n        \"Driver\": \"null\",\n        \"EnableIPv6\": false,\n        \"IPAM\": {\n            \"Driver\": \"default\",\n            \"Options\": null,\n            \"Config\": []\n        },\n        \"Internal\": false,\n        \"Containers\": {\n            \"8ce6015f36de4a2b1d942a23a5799e50109a156c9d2170781f03b4802e4be034\": {\n                \"Name\": \"adoring_kowalevski\",\n                \"EndpointID\": \"e5955b9d6cb0980dd1f88d2fb8f94d0b75a6f5274f526dfe82768cad5175a746\",\n                \"MacAddress\": \"\",\n                \"IPv4Address\": \"\",\n                \"IPv6Address\": \"\"\n            }\n        },\n        \"Options\": {},\n        \"Labels\": {}\n    }\n]\n$\n$ docker exec -it adoring_kowalevski ifconfig\nlo        Link encap:Local Loopback  \n          inet addr:127.0.0.1  Mask:255.0.0.0\n          inet6 addr: ::1%32525\/128 Scope:Host\n          UP LOOPBACK RUNNING  MTU:65536  Metric:1\n          RX packets:0 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)\n<\/pre>\n<p>As you can see from the above, the command to attach a container to the none network is through the <code>--net=none<\/code> option. The command <code>docker run --detach --net=none infinite-loop-alpine<\/code> created a container called <em>adoring_kowalevski<\/em> and assigned it the <code>none<\/code> network. This can be verified by inspecting the network through the command <code>docker network inspect none<\/code>. It is seen that <em>adoring_kowalevski<\/em> does not have IP address or MAC address allotted to it. Finally, when you run the command <code>ifconfig<\/code> within the container you see that only the loopback interface is configured.<\/p>\n<p>The <code>none<\/code> network is useful to create containers that need to do standalone batch jobs without any dependency on other networks.<\/p>\n<h3>2.4 The host network<\/h3>\n<p>When a container is connected to the <code>host<\/code> network, it gets the same network configuration as in the host OS.<\/p>\n<pre class=\"brush:bash\">$ docker run --detach --net=host infinite-loop-alpine\n9b53dbb876d3d53a4d90ad14374cd73398342481e3cc976f42e9302e2806c846\n$\n$ docker ps --format=\"{{.ID}} {{.Names}}\"\n9b53dbb876d3 stupefied_meninsky\nceb6846e5d7a loving_roentgen\n7f7ef05a21f1 hariharan-private-docker-registry\n$\n$ docker network inspect host\n[\n    {\n        \"Name\": \"host\",\n        \"Id\": \"18e8e68644ea8984908af0084c72a788726c7cc685a1937e4d8213546834fa1e\",\n        \"Scope\": \"local\",\n        \"Driver\": \"host\",\n        \"EnableIPv6\": false,\n        \"IPAM\": {\n            \"Driver\": \"default\",\n            \"Options\": null,\n            \"Config\": []\n        },\n        \"Internal\": false,\n        \"Containers\": {\n            \"9b53dbb876d3d53a4d90ad14374cd73398342481e3cc976f42e9302e2806c846\": {\n                \"Name\": \"stupefied_meninsky\",\n                \"EndpointID\": \"584f923dc3f9c41d16754d99fc66b9b7403c31cbb707d3e3cd2655baacfd7e7f\",\n                \"MacAddress\": \"\",\n                \"IPv4Address\": \"\",\n                \"IPv6Address\": \"\"\n            }\n        },\n        \"Options\": {},\n        \"Labels\": {}\n    }\n]\n$\n$ docker exec -it stupefied_meninsky ifconfig\ndocker0   Link encap:Ethernet  HWaddr 02:42:FE:8F:34:D6  \n          inet addr:172.17.0.1  Bcast:0.0.0.0  Mask:255.255.0.0\n          inet6 addr: fe80::42:feff:fe8f:34d6%32754\/64 Scope:Link\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:32 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:350 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:2144 (2.0 KiB)  TX bytes:62088 (60.6 KiB)\n\nenp0s25   Link encap:Ethernet  HWaddr F0:DE:F1:34:04:7D  \n          UP BROADCAST MULTICAST  MTU:1500  Metric:1\n          RX packets:0 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:1000 \n          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)\n          Interrupt:20 Memory:f2600000-f2620000 \n\nlo        Link encap:Local Loopback  \n          inet addr:127.0.0.1  Mask:255.0.0.0\n          inet6 addr: ::1%32754\/128 Scope:Host\n          UP LOOPBACK RUNNING  MTU:65536  Metric:1\n          RX packets:248 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:248 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:19932 (19.4 KiB)  TX bytes:19932 (19.4 KiB)\n\nveth1195497 Link encap:Ethernet  HWaddr 92:94:1E:B1:88:A3  \n          inet6 addr: fe80::9094:1eff:feb1:88a3%32754\/64 Scope:Link\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:8 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:268 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:648 (648.0 B)  TX bytes:46584 (45.4 KiB)\n\nveth8dbd591 Link encap:Ethernet  HWaddr F6:59:DB:33:90:D4  \n          inet6 addr: fe80::f459:dbff:fe33:90d4%32754\/64 Scope:Link\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:8 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:428 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:648 (648.0 B)  TX bytes:68993 (67.3 KiB)\n\nvirbr0    Link encap:Ethernet  HWaddr 52:54:00:0D:56:AB  \n          inet addr:192.168.122.1  Bcast:192.168.122.255  Mask:255.255.255.0\n          UP BROADCAST MULTICAST  MTU:1500  Metric:1\n          RX packets:0 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:0 \n          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)\n\nwlp3s0    Link encap:Ethernet  HWaddr 00:24:D7:8A:BF:7C  \n          inet addr:192.168.1.107  Bcast:192.168.1.255  Mask:255.255.255.0\n          inet6 addr: fe80::224:d7ff:fe8a:bf7c%32754\/64 Scope:Link\n          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1\n          RX packets:3018393 errors:0 dropped:0 overruns:0 frame:0\n          TX packets:1256101 errors:0 dropped:0 overruns:0 carrier:0\n          collisions:0 txqueuelen:1000 \n          RX bytes:4091579215 (3.8 GiB)  TX bytes:148684970 (141.7 MiB)\n<\/pre>\n<p>As you can see from the above, the command <code>docker run --detach --net=host infinite-loop-alpine<\/code> created a container called <em>stupefied_meninsky<\/em> and assigned it the <code>host<\/code> network. This can be verified by inspecting the network through the command <code>docker network inspect host<\/code>. Finally, when you run the command <code>ifconfig<\/code> within the container you see that it has all the network interfaces configured in the host OS (well, from my laptop&#8217;s OS actually. The interfaces configured in your host OS may vary).[ulp id=&#8217;6PVIvOz3kDbYmNRn&#8217;]<\/p>\n<h3>2.5 Docker engine commands to manage Docker networks<\/h3>\n<p>We already saw the command <code>docker network ls<\/code> and <code>docker network inspect<\/code>. Here is a summary of commands to manage Docker networks. Use option <code>docker network &lt;command&gt; --help<\/code> to see the list of all options for the command.<\/p>\n<table>\n<tbody>\n<tr>\n<th>Command<\/th>\n<th>Summary<\/th>\n<\/tr>\n<tr>\n<td><code>docker network connect &lt;network-name&gt; &lt;container-name&gt;<\/code><\/td>\n<td>Connects the given container to the specified network.<\/td>\n<\/tr>\n<tr>\n<td><code>docker network disconnect &lt;network-name&gt; &lt;container-name&gt;<\/code><\/td>\n<td>Disconnects the given container to the specified network.<\/td>\n<\/tr>\n<tr>\n<td><code>docker network create [--driver &lt;driver-name&gt;] &lt;network-name&gt;<\/code><\/td>\n<td>Creates a new Docker network with the given name. If the option &#8211;driver is not given then the network will be created as a <code>bridge<\/code> network. Else, the specified driver will be used.<\/td>\n<\/tr>\n<tr>\n<td><code>docker network inspect &lt;network-name&gt;<\/code><\/td>\n<td>Provides details for the given Docker network. To inspect details of multiple networks mention all other network names separated by a space.<\/td>\n<\/tr>\n<tr>\n<td><code>docker network ls<\/code><\/td>\n<td>List all Docker networks.<\/td>\n<\/tr>\n<tr>\n<td><code>docker network rm &lt;network-name&gt;<\/code><\/td>\n<td>Remove the given Docker network. To inspect details of multiple networks mention all other network names separated by a space.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>3. User defined networks<\/h2>\n<p>As shown in the table above, the command <code>docker network create [--driver &lt;driver-name&gt;] &lt;network-name&gt;<\/code> is used to create a new user-defined network. The option <code>--driver &lt;driver-name&gt;<\/code> is optional. If not provided, a bridge network is created. This option can take one of the values <code>bridge<\/code>, <code>overlay<\/code>, or <code>macvlan<\/code> as provided by Docker or a user-defined driver value.<\/p>\n<h3>3.1 Create a user defined Docker network<\/h3>\n<p>Lets use the command above to create a custom bridge network.<\/p>\n<pre class=\"brush:bash\">$ docker network create --driver bridge example-network-1\n4480467dd40757e2507426367b599de520b330287fb579f37082f4f726f6467f\n$\n$ docker network list\nNETWORK ID          NAME                DRIVER              SCOPE\n81419cac2baf        bridge              bridge              local               \n4480467dd407        example-network-1   bridge              local               \n18e8e68644ea        host                host                local               \n1f87f168df62        none                null                local               \n$\n$ docker network inspect example-network-1 \n[\n    {\n        \"Name\": \"example-network-1\",\n        \"Id\": \"4480467dd40757e2507426367b599de520b330287fb579f37082f4f726f6467f\",\n        \"Scope\": \"local\",\n        \"Driver\": \"bridge\",\n        \"EnableIPv6\": false,\n        \"IPAM\": {\n            \"Driver\": \"default\",\n            \"Options\": {},\n            \"Config\": [\n                {\n                    \"Subnet\": \"172.18.0.0\/16\",\n                    \"Gateway\": \"172.18.0.1\/16\"\n                }\n            ]\n        },\n        \"Internal\": false,\n        \"Containers\": {},\n        \"Options\": {},\n        \"Labels\": {}\n    }\n]\n$\n$ docker run --detach --name=infinite-loop-1 infinite-loop-alpine\n44c4b02e18dc182d37efad85c04bd936f020dbe9e1e1036b435e30a97905e279\n$\n$ docker run --detach --name=infinite-loop-2 infinite-loop-alpine\nc9268f5d5746e23790074fc0b06bcc0d33451da12c13aa77b12248830600d560\n$\n$ docker network connect example-network-1 infinite-loop-1 \n$ docker network connect example-network-1 infinite-loop-2 \n$\n$ docker network inspect example-network-1 \n[\n    {\n        \"Name\": \"example-network-1\",\n        \"Id\": \"4480467dd40757e2507426367b599de520b330287fb579f37082f4f726f6467f\",\n        \"Scope\": \"local\",\n        \"Driver\": \"bridge\",\n        \"EnableIPv6\": false,\n        \"IPAM\": {\n            \"Driver\": \"default\",\n            \"Options\": {},\n            \"Config\": [\n                {\n                    \"Subnet\": \"172.18.0.0\/16\",\n                    \"Gateway\": \"172.18.0.1\/16\"\n                }\n            ]\n        },\n        \"Internal\": false,\n        \"Containers\": {\n            \"44c4b02e18dc182d37efad85c04bd936f020dbe9e1e1036b435e30a97905e279\": {\n                \"Name\": \"infinite-loop-1\",\n                \"EndpointID\": \"8604f0d048680019c122f07ad35dbc00b474f689d8ff75719f307f57d29b5a03\",\n                \"MacAddress\": \"02:42:ac:12:00:02\",\n                \"IPv4Address\": \"172.18.0.2\/16\",\n                \"IPv6Address\": \"\"\n            },\n            \"c9268f5d5746e23790074fc0b06bcc0d33451da12c13aa77b12248830600d560\": {\n                \"Name\": \"infinite-loop-2\",\n                \"EndpointID\": \"d769935f984f9dfbc82ae3de107ad841117967aac20f0e826b429859c3d31ffd\",\n                \"MacAddress\": \"02:42:ac:12:00:03\",\n                \"IPv4Address\": \"172.18.0.3\/16\",\n                \"IPv6Address\": \"\"\n            }\n        },\n        \"Options\": {},\n        \"Labels\": {}\n    }\n]\n$\n$ docker exec -it infinite-loop-1 ping -c 4 infinite-loop-2\nPING infinite-loop-2 (172.18.0.3): 56 data bytes\n64 bytes from 172.18.0.3: seq=0 ttl=64 time=0.185 ms\n64 bytes from 172.18.0.3: seq=1 ttl=64 time=0.172 ms\n64 bytes from 172.18.0.3: seq=2 ttl=64 time=0.192 ms\n64 bytes from 172.18.0.3: seq=3 ttl=64 time=0.174 ms\n\n--- infinite-loop-2 ping statistics ---\n4 packets transmitted, 4 packets received, 0% packet loss\nround-trip min\/avg\/max = 0.172\/0.180\/0.192 ms\n<\/pre>\n<p>We created a new bridge network called <code>example-network-1<\/code> and connected 2 containers called <code>infinite-loop-1<\/code> and <code>infinite-loop-2<\/code> to it. Next, we verified that the network had the containers connected successfully. Lastly, we pinged the container <code>infinite-loop-2<\/code> from within <code>infinite-loop-1<\/code> using the container name.<\/p>\n<p>Do note that containers can be accessed by name only within user-defined networks. In Docker&#8217;s bridge netowrk, for example, containers can be accessed over the network only by their IP addresses.<\/p>\n<h2>5. Summary<\/h2>\n<p>In this post We were introduced to the basics of Docker container networking. The Docker Engine enables 3 types of networks out of the box &#8211; bridge, overlay, and none. The bridge network is the default network for most practical purposes. User defined networks can be of 3 types &#8211; bridge, overly, and MACVLAN. The &#8220;Docker network&#8221; family of commands provides the necessary commands to create and manage Docker networks. Finally, we saw how to communicate among containers in a single-host setup.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>1. Introduction In this post, we will learn the basics of Docker container networking in a single host setup. We will see the basic inrastructure provided by the Docker Engine for container networking, the &#8220;Docker network&#8221; family of commands, and the basics of creating user-defined networks. We wil not cover networking with containers in multiple &hellip;<\/p>\n","protected":false},"author":103,"featured_media":31013,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1354],"tags":[],"class_list":["post-42646","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-docker"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v26.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Docker Container Networking Tutorial - Java Code Geeks<\/title>\n<meta name=\"description\" content=\"In this post we will learn the basics of Docker networking in a single-host environment. We&#039;ll discuss Docker&#039;s default networks and user-defined networks.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Docker Container Networking Tutorial - Java Code Geeks\" \/>\n<meta property=\"og:description\" content=\"In this post we will learn the basics of Docker networking in a single-host environment. We&#039;ll discuss Docker&#039;s default networks and user-defined networks.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/\" \/>\n<meta property=\"og:site_name\" content=\"Examples Java Code Geeks\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/javacodegeeks\" \/>\n<meta property=\"article:published_time\" content=\"2016-12-21T09:00:08+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-03-29T12:12:08+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"150\" \/>\n\t<meta property=\"og:image:height\" content=\"150\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Hariharan Narayanan\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:site\" content=\"@javacodegeeks\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Hariharan Narayanan\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/\"},\"author\":{\"name\":\"Hariharan Narayanan\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/780d96edfe3bce18c5440613fa88bce3\"},\"headline\":\"Docker Container Networking Tutorial\",\"datePublished\":\"2016-12-21T09:00:08+00:00\",\"dateModified\":\"2019-03-29T12:12:08+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/\"},\"wordCount\":931,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg\",\"articleSection\":[\"Docker\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/\",\"url\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/\",\"name\":\"Docker Container Networking Tutorial - Java Code Geeks\",\"isPartOf\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg\",\"datePublished\":\"2016-12-21T09:00:08+00:00\",\"dateModified\":\"2019-03-29T12:12:08+00:00\",\"description\":\"In this post we will learn the basics of Docker networking in a single-host environment. We'll discuss Docker's default networks and user-defined networks.\",\"breadcrumb\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#primaryimage\",\"url\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg\",\"contentUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg\",\"width\":150,\"height\":150},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/examples.javacodegeeks.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"DevOps\",\"item\":\"https:\/\/examples.javacodegeeks.com\/category\/devops\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Docker\",\"item\":\"https:\/\/examples.javacodegeeks.com\/category\/devops\/docker\/\"},{\"@type\":\"ListItem\",\"position\":4,\"name\":\"Docker Container Networking Tutorial\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#website\",\"url\":\"https:\/\/examples.javacodegeeks.com\/\",\"name\":\"Java Code Geeks\",\"description\":\"Java Examples and Code Snippets\",\"publisher\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#organization\"},\"alternateName\":\"JCG\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/examples.javacodegeeks.com\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#organization\",\"name\":\"Exelixis Media P.C.\",\"url\":\"https:\/\/examples.javacodegeeks.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"contentUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png\",\"width\":864,\"height\":246,\"caption\":\"Exelixis Media P.C.\"},\"image\":{\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/javacodegeeks\",\"https:\/\/x.com\/javacodegeeks\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/780d96edfe3bce18c5440613fa88bce3\",\"name\":\"Hariharan Narayanan\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/10\/Hariharan-Narayanan-96x96.jpg\",\"contentUrl\":\"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/10\/Hariharan-Narayanan-96x96.jpg\",\"caption\":\"Hariharan Narayanan\"},\"description\":\"Hari graduated from the School of Computer and Information Sciences in the University of Hyderabad. Over his career he has been involved in many complex projects in mobile applications, enterprise applications, distributed applications, micro-services, and other platforms and frameworks. He works as a consultant and is mainly involved with projects based on Java, C++ and Big Data technologies.\",\"sameAs\":[\"https:\/\/www.javacodegeeks.com\"],\"url\":\"https:\/\/examples.javacodegeeks.com\/author\/hariharan-narayanan\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Docker Container Networking Tutorial - Java Code Geeks","description":"In this post we will learn the basics of Docker networking in a single-host environment. We'll discuss Docker's default networks and user-defined networks.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/","og_locale":"en_US","og_type":"article","og_title":"Docker Container Networking Tutorial - Java Code Geeks","og_description":"In this post we will learn the basics of Docker networking in a single-host environment. We'll discuss Docker's default networks and user-defined networks.","og_url":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/","og_site_name":"Examples Java Code Geeks","article_publisher":"https:\/\/www.facebook.com\/javacodegeeks","article_published_time":"2016-12-21T09:00:08+00:00","article_modified_time":"2019-03-29T12:12:08+00:00","og_image":[{"width":150,"height":150,"url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg","type":"image\/jpeg"}],"author":"Hariharan Narayanan","twitter_card":"summary_large_image","twitter_creator":"@javacodegeeks","twitter_site":"@javacodegeeks","twitter_misc":{"Written by":"Hariharan Narayanan","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#article","isPartOf":{"@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/"},"author":{"name":"Hariharan Narayanan","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/780d96edfe3bce18c5440613fa88bce3"},"headline":"Docker Container Networking Tutorial","datePublished":"2016-12-21T09:00:08+00:00","dateModified":"2019-03-29T12:12:08+00:00","mainEntityOfPage":{"@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/"},"wordCount":931,"commentCount":0,"publisher":{"@id":"https:\/\/examples.javacodegeeks.com\/#organization"},"image":{"@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg","articleSection":["Docker"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/","url":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/","name":"Docker Container Networking Tutorial - Java Code Geeks","isPartOf":{"@id":"https:\/\/examples.javacodegeeks.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#primaryimage"},"image":{"@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#primaryimage"},"thumbnailUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg","datePublished":"2016-12-21T09:00:08+00:00","dateModified":"2019-03-29T12:12:08+00:00","description":"In this post we will learn the basics of Docker networking in a single-host environment. We'll discuss Docker's default networks and user-defined networks.","breadcrumb":{"@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#primaryimage","url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg","contentUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2015\/12\/docker-logo.jpg","width":150,"height":150},{"@type":"BreadcrumbList","@id":"https:\/\/examples.javacodegeeks.com\/devops\/docker\/docker-container-networking-tutorial\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/examples.javacodegeeks.com\/"},{"@type":"ListItem","position":2,"name":"DevOps","item":"https:\/\/examples.javacodegeeks.com\/category\/devops\/"},{"@type":"ListItem","position":3,"name":"Docker","item":"https:\/\/examples.javacodegeeks.com\/category\/devops\/docker\/"},{"@type":"ListItem","position":4,"name":"Docker Container Networking Tutorial"}]},{"@type":"WebSite","@id":"https:\/\/examples.javacodegeeks.com\/#website","url":"https:\/\/examples.javacodegeeks.com\/","name":"Java Code Geeks","description":"Java Examples and Code Snippets","publisher":{"@id":"https:\/\/examples.javacodegeeks.com\/#organization"},"alternateName":"JCG","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/examples.javacodegeeks.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/examples.javacodegeeks.com\/#organization","name":"Exelixis Media P.C.","url":"https:\/\/examples.javacodegeeks.com\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/","url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","contentUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2022\/06\/exelixis-logo.png","width":864,"height":246,"caption":"Exelixis Media P.C."},"image":{"@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/javacodegeeks","https:\/\/x.com\/javacodegeeks"]},{"@type":"Person","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/780d96edfe3bce18c5440613fa88bce3","name":"Hariharan Narayanan","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/examples.javacodegeeks.com\/#\/schema\/person\/image\/","url":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/10\/Hariharan-Narayanan-96x96.jpg","contentUrl":"https:\/\/examples.javacodegeeks.com\/wp-content\/uploads\/2016\/10\/Hariharan-Narayanan-96x96.jpg","caption":"Hariharan Narayanan"},"description":"Hari graduated from the School of Computer and Information Sciences in the University of Hyderabad. Over his career he has been involved in many complex projects in mobile applications, enterprise applications, distributed applications, micro-services, and other platforms and frameworks. He works as a consultant and is mainly involved with projects based on Java, C++ and Big Data technologies.","sameAs":["https:\/\/www.javacodegeeks.com"],"url":"https:\/\/examples.javacodegeeks.com\/author\/hariharan-narayanan\/"}]}},"_links":{"self":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/42646","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/users\/103"}],"replies":[{"embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/comments?post=42646"}],"version-history":[{"count":0,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/posts\/42646\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/media\/31013"}],"wp:attachment":[{"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/media?parent=42646"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/categories?post=42646"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/examples.javacodegeeks.com\/wp-json\/wp\/v2\/tags?post=42646"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}