2017-05-05 75 views
3

我用命令我的Docker容器没有IP地址。为什么?

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 

现在容器成功启动开始rethinkDB泊坞窗容器。我做了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 

现在我要找出这个容器的IP地址。所以我做了

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

它没有回报我。我找不到这个容器的IP地址。

我检查了rethinkDB配置页面是否启动,转到http://localhost:8080,我发现它已启动并正在运行。

为什么这个容器没有任何IP地址?

输出的 docker inspect

如下

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

尝试不使用格式选项 – bxN5

+0

@ bxN5:我甚至手动检查了'docker inspect f288961ef376'的'JSON'输出。我没有看到IP地址 –

+0

附加请输出检查没有格式选项 – bxN5

回答

5

你开始与--net host选项,这意味着您的容器将您的主机的网络上运行您的容器。查看here了解更多信息。所以你的容器可以通过你的主机的IP进行访问。

一个很简单的例子:

$ docker run --net=host -d jenkins 

这将您的真实主机的网络上运行詹金斯。所以当你打开防火墙(jenkins在8080上运行)时,你将立即访问你的容器。 于是我打开防火墙:

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

检查我的eth0(主机网络)的真实IP与ifconfig。 (我在VM上这样做)。这是inet 192.168.140.7。我在我的浏览器中去192.168.140.7:8080,我看到詹金斯。所以你的容器没有自己的IP。它运行在你的主机网络和主机IP上。

如果您离开--net host选项,将在范围为"172.17.0.0/16"的默认码头桥网络中创建容器。现在你的容器将从该网络的范围内获得一个IP。要从外部访问容器,必须在主机网络上映射端口(请参阅更多信息)。您可以使用-p选项执行此操作。

所以对于詹金斯例如:

$ docker run -d -p 8888:8080 jenkins 

当我执行docker inspect我看到:

"IPAddress": "172.17.0.4", 

所以我的容器桥网络中的172.17.0.4:8080运行。 现在用-p选项,我在我的主机网络的8888上映射了我的网桥网络的端口8080:所以host-IP:8888。现在可以从外部访问。

1

您的容器知识产权一样的主机。 host基本上说,你的容器使用与主机相同的网络接口。这是快速的,因为没有桥接但有限;您必须确保您的容器不听同一端口以避免冲突。

最好是坚持使用默认bridge网络,并指定要暴露到主机的端口。例如:

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

顺便说一句,--net已经在码头工人的更高版本中改名为--network

相关问题