Docker container has no IP address. What for?

I started a docker container rethinkDB

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

      

The container has now started successfully. I diddocker 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 doesn't return anything to me. I couldn't find the IP address for this container.

I checked if the config page is rethinkDB

inserted or not by going to http://localhost:8080

and I can see it working.

Why doesn't this container have an IP address?

The output docker inspect

looks like this

[
    {
        "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": ""
                }
            }
        }
    }
]

      

+3


source to share


2 answers


You start your container with an option --net host

, which means your container will run on your host network. Read more about here . This way, your container will be available on your host's IP.

The simplest example:

$ docker run --net=host -d jenkins

      

This will launch jenkins on your real host network. So when you open the firewall (jenkins starts at 8080) you will have access to your container immediately. So I open up the firewall:

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

      

I am checking the real IP address of my eth0 (host network) with ifconfig

. (I am doing this in a virtual machine). This is inet 192.168.140.7

. I go to my browser to 192.168.140.7:8080 and I see the jenkins. Thus, your container does not have its own IP address. It works on your host network and host IP.



If you leave the parameter --net host

, the container will be created on the default docker bridge network with a range "172.17.0.0/16"

. Your container will now receive an IP address within this network. To access the container from the outside, you need to map your ports on the host's network (see more information). You can do this with an option -p

.

So for the jenkins example:

$ docker run -d -p 8888:8080 jenkins

      

When I execute a docker inspect

, I see:

"IPAddress": "172.17.0.4",

      

So my container is running on the bridge network at 172.17.0.4:8080. Now with the option, -p

I map port 8080 of my bridged network to 8888 of my host network: so host-IP:8888

. It is now accessible from the outside.

+5


source


Your container ip is the same as the host. host

basically says your container is using the same network interface as the host. It's fast because there are no bridges, but limited; You need to make sure your containers are not listening on the same port to avoid conflicts.

Better to stick with the default network bridge

and specify the port you want to open for the host. For example:



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

was renamed to --network

in later versions of Docker.

+1


source







All Articles