Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

My Docker container does not have IP address. Why?

Tags:

I started a rethinkDB docker container using the command

docker pull rethinkdb:2.3 docker run --rm --name rethinkdb -v /srv/rethinkdb:/data --net host rethinkdb:2.3 rethinkdb --bind all --cache-size 8192 --no-update-check 

Now the container started successfully. I did docker ps

CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES f288961ef376        rethinkdb:2.3       "rethinkdb --bind ..."   9 minutes ago       Up 9 minutes                            rethinkdb 1f71722698ae        sorccu/adb:latest   "/sbin/tini -- adb..."   14 minutes ago      Up 14 minutes                           adbd 

Now I want to find out the IP address of this container. So I did

docker inspect --format '{{ .NetworkSettings.IPAddress }}' f288961ef376 

It's returning me nothing. I couldn't find IP address for this container.

I checked if the rethinkDB configuration page is up or not by going to http://localhost:8080 and I see it's up and running.

Why doesn't this container have any IP address?

Output of docker inspect is as follows

[     {         "Id": "f288961ef376531c97d2264cb8ef3c6077a6a75107905d6a47734303adfcb117",         "Created": "2017-05-05T11:13:45.382460184Z",         "Path": "rethinkdb",         "Args": [             "--bind",             "all",             "--cache-size",             "8192",             "--no-update-check"         ],         "State": {             "Status": "running",             "Running": true,             "Paused": false,             "Restarting": false,             "OOMKilled": false,             "Dead": false,             "Pid": 8157,             "ExitCode": 0,             "Error": "",             "StartedAt": "2017-05-05T11:13:45.774035358Z",             "FinishedAt": "0001-01-01T00:00:00Z"         },         "Image": "sha256:c5ed876750b40cde4725ea9eb9d8503f4d1419a2f23ac2ef8e4cc1d535e2c3a2",         "ResolvConfPath": "/var/lib/docker/containers/f288961ef376531c97d2264cb8ef3c6077a6a75107905d6a47734303adfcb117/resolv.conf",         "HostnamePath": "/var/lib/docker/containers/f288961ef376531c97d2264cb8ef3c6077a6a75107905d6a47734303adfcb117/hostname",         "HostsPath": "/var/lib/docker/containers/f288961ef376531c97d2264cb8ef3c6077a6a75107905d6a47734303adfcb117/hosts",         "LogPath": "/var/lib/docker/containers/f288961ef376531c97d2264cb8ef3c6077a6a75107905d6a47734303adfcb117/f288961ef376531c97d2264cb8ef3c6077a6a75107905d6a47734303adfcb117-json.log",         "Name": "/rethinkdb",         "RestartCount": 0,         "Driver": "aufs",         "MountLabel": "",         "ProcessLabel": "",         "AppArmorProfile": "docker-default",         "ExecIDs": null,         "HostConfig": {             "Binds": [                 "/srv/rethinkdb:/data"             ],             "ContainerIDFile": "",             "LogConfig": {                 "Type": "json-file",                 "Config": {}             },             "NetworkMode": "host",             "PortBindings": {},             "RestartPolicy": {                 "Name": "no",                 "MaximumRetryCount": 0             },             "AutoRemove": true,             "VolumeDriver": "",             "VolumesFrom": null,             "CapAdd": null,             "CapDrop": null,             "Dns": [],             "DnsOptions": [],             "DnsSearch": [],             "ExtraHosts": null,             "GroupAdd": null,             "IpcMode": "",             "Cgroup": "",             "Links": null,             "OomScoreAdj": 0,             "PidMode": "",             "Privileged": false,             "PublishAllPorts": false,             "ReadonlyRootfs": false,             "SecurityOpt": null,             "UTSMode": "",             "UsernsMode": "",             "ShmSize": 67108864,             "Runtime": "runc",             "ConsoleSize": [                 0,                 0             ],             "Isolation": "",             "CpuShares": 0,             "Memory": 0,             "NanoCpus": 0,             "CgroupParent": "",             "BlkioWeight": 0,             "BlkioWeightDevice": null,             "BlkioDeviceReadBps": null,             "BlkioDeviceWriteBps": null,             "BlkioDeviceReadIOps": null,             "BlkioDeviceWriteIOps": null,             "CpuPeriod": 0,             "CpuQuota": 0,             "CpuRealtimePeriod": 0,             "CpuRealtimeRuntime": 0,             "CpusetCpus": "",             "CpusetMems": "",             "Devices": [],             "DeviceCgroupRules": null,             "DiskQuota": 0,             "KernelMemory": 0,             "MemoryReservation": 0,             "MemorySwap": 0,             "MemorySwappiness": -1,             "OomKillDisable": false,             "PidsLimit": 0,             "Ulimits": null,             "CpuCount": 0,             "CpuPercent": 0,             "IOMaximumIOps": 0,             "IOMaximumBandwidth": 0         },         "GraphDriver": {             "Data": null,             "Name": "aufs"         },         "Mounts": [             {                 "Type": "bind",                 "Source": "/srv/rethinkdb",                 "Destination": "/data",                 "Mode": "",                 "RW": true,                 "Propagation": ""             }         ],         "Config": {             "Hostname": "dev-machine",             "Domainname": "",             "User": "",             "AttachStdin": false,             "AttachStdout": true,             "AttachStderr": true,             "ExposedPorts": {                 "28015/tcp": {},                 "29015/tcp": {},                 "8080/tcp": {}             },             "Tty": false,             "OpenStdin": false,             "StdinOnce": false,             "Env": [                 "PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin",                 "RETHINKDB_PACKAGE_VERSION=2.3.5~0jessie"             ],             "Cmd": [                 "rethinkdb",                 "--bind",                 "all",                 "--cache-size",                 "8192",                 "--no-update-check"             ],             "Image": "rethinkdb:2.3",             "Volumes": {                 "/data": {}             },             "WorkingDir": "/data",             "Entrypoint": null,             "OnBuild": null,             "Labels": {}         },         "NetworkSettings": {             "Bridge": "",             "SandboxID": "bd17bf8e1663ff18f6674a1a3a1665c4e1bf65283d358ffc97dc238ef4a79088",             "HairpinMode": false,             "LinkLocalIPv6Address": "",             "LinkLocalIPv6PrefixLen": 0,             "Ports": {},             "SandboxKey": "/var/run/docker/netns/default",             "SecondaryIPAddresses": null,             "SecondaryIPv6Addresses": null,             "EndpointID": "",             "Gateway": "",             "GlobalIPv6Address": "",             "GlobalIPv6PrefixLen": 0,             "IPAddress": "",             "IPPrefixLen": 0,             "IPv6Gateway": "",             "MacAddress": "",             "Networks": {                 "host": {                     "IPAMConfig": null,                     "Links": null,                     "Aliases": null,                     "NetworkID": "30b6150968580d33aae0e45f7d850b9e67ae2aa29e1bb837ca4fa74f2b0d4d42",                     "EndpointID": "05e93ec514ee6694e57d344f3e4362252104347c3cc48c607708d125715ed6ec",                     "Gateway": "",                     "IPAddress": "",                     "IPPrefixLen": 0,                     "IPv6Gateway": "",                     "GlobalIPv6Address": "",                     "GlobalIPv6PrefixLen": 0,                     "MacAddress": ""                 }             }         }     } ] 
like image 974
Damien-Amen Avatar asked May 05 '17 11:05

Damien-Amen


People also ask

Does a docker container have an IP address?

By default, the container is assigned an IP address for every Docker network it connects to. The IP address is assigned from the pool assigned to the network, so the Docker daemon effectively acts as a DHCP server for each container. Each network also has a default subnet mask and gateway.

How do I find the IP address of my Docker container?

Use the command sudo docker ps . The inspect command gives you many details about the container you are inspecting. Go towards the end and look into the Networks section to get the container's IP address. You may also use grep command to get just the lines matching the string "IPAddress".

Does Docker container have same IP as host?

On Docker for Linux, the IP address of the gateway between the Docker host and the bridge network is 172.17. 0.1 if you are using default networking. Do you see the problem already? They are different, so you cannot simply run docker-compose up -d and all operating systems behave the same.


2 Answers

You are starting your container with the --net host option which means your container will run on your host network. Check here for more info. So your container will be accessible on the IP of your host.

A very basic example:

$ docker run --net=host -d jenkins 

This will run jenkins on your real host network. So when you open the firewall (jenkins runs on 8080) you will access your container immediatly. So I open the firewall:

$ sudo iptables -I INPUT 5 -p tcp -m tcp --dport 8080 -j ACCEPT 

I check the real IP of my eth0 (host network) with ifconfig. (I'm doing this on a VM). It is inet 192.168.140.7. I go in my browser to 192.168.140.7:8080 and I see the jenkins. So your container has no own IP. It's running on your host network and host IP.

If you leave the --net host option, the container will be created in the default docker bridge network with range "172.17.0.0/16". Now your container will get an IP from in the range of that network. To access the container from the outside you have to map your ports on your host network (see the more info). You can do this with the -p option.

So for the jenkins example:

$ docker run -d -p 8888:8080 jenkins 

When I perform a docker inspect I see:

"IPAddress": "172.17.0.4", 

So my container is running in the bridge network on 172.17.0.4:8080. Now with the -p option I'm mapping the port 8080 of my bridge network on 8888 of my host network: so host-IP:8888. Now it's accessible from the outside.

like image 114
lvthillo Avatar answered Sep 25 '22 01:09

lvthillo


Your container ip the the same as the host. host basically says that your container uses the same network interface as the host. It is fast since there's no bridging but limited; You have to make sure that your containers do not listen to the same port to avoid conflicts.

It's better to stick with the default bridge network and specify the port that you want exposed to the host. For instance:

docker run --rm --name rethinkdb -v /srv/rethinkdb:/data -p 8080:8080 \     rethinkdb:2.3 rethinkdb --bind all --cache-size 8192 --no-update-check 

btw, --net has been renamed --network in later versions of Docker.

like image 31
Bernard Avatar answered Sep 26 '22 01:09

Bernard