无法连接到Docker服务

时间:2018-07-12 05:17:01

标签: docker docker-for-mac

我正在MAC机器上运行docker映像,当我登录到容器时,我看到的IP地址为“ 172.17.0.2”(cat / etc / hosts)。

  1. 码头工人如何选择IP?
  2. 泊坞窗是否选择了任何IP范围?

  3. 如果我在同一主机上运行多个容器怎么办?会有所不同吗?

  4. /etc/resolve.conf提供了一些IP。那是什么IP,它从哪里得到?
  5. 如何使用内部IP(例如172.17.0.2)连接到docker服务
  

ping CONTAINER_ID->返回IP 172.17.0.2

它如何解析主机名?

我尝试通过网络阅读,但没有帮助。

此外,我正在端口8443上运行我的服务。但是,我仍然无法连接。

我尝试跑步,

  

docker run -net host -p 8443:8443 IMAGE

仍然没有运气。

还尝试了以下方法。

docker run -p MY_MACHINE_IP:8080:8080 IMAGE

尝试过,

  

http://MY_MACHINE_IP:8080

     

http://localhost:8080

以上都不起作用。

ifconfig输出

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=1203<RXCSUM,TXCSUM,TXSTATUS,SW_TIMESTAMP>
    inet 127.0.0.1 netmask 0xff000000 
    inet6 ::1 prefixlen 128 
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1 
    nd6 options=201<PERFORMNUD,DAD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
XHC20: flags=0<> mtu 0
en0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    ether 60:f8:1d:b2:cb:0c 
    inet6 fe80::49d:a511:dc4e:7960%en0 prefixlen 64 secured scopeid 0x5 
    inet 10.231.168.63 netmask 0xffe00000 broadcast 10.255.255.255
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
p2p0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 2304
    ether 02:f8:1d:b2:cb:0c 
    media: autoselect
    status: inactive
awdl0: flags=8943<UP,BROADCAST,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1484
    ether 0a:71:96:61:e4:eb 
    inet6 fe80::871:96ff:fe61:e4eb%awdl0 prefixlen 64 scopeid 0x7 
    nd6 options=201<PERFORMNUD,DAD>
    media: autoselect
    status: active
en1: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 72:00:07:57:48:30 
    media: autoselect <full-duplex>
    status: inactive
en2: flags=8963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX,MULTICAST> mtu 1500
    options=60<TSO4,TSO6>
    ether 72:00:07:57:48:31 
    media: autoselect <full-duplex>
    status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether 72:00:07:57:48:30 
    Configuration:
        id 0:0:0:0:0:0 priority 0 hellotime 0 fwddelay 0
        maxage 0 holdcnt 0 proto stp maxaddr 100 timeout 1200
        root id 0:0:0:0:0:0 priority 0 ifcost 0 port 0
        ipfilter disabled flags 0x2
    member: en1 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 8 priority 0 path cost 0
    member: en2 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 9 priority 0 path cost 0
    nd6 options=201<PERFORMNUD,DAD>
    media: <unknown type>
    status: inactive
utun0: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 2000
    inet6 fe80::3f17:8946:c18d:5d25%utun0 prefixlen 64 scopeid 0xb 
    nd6 options=201<PERFORMNUD,DAD>
utun2: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
    inet6 fe80::20aa:76fd:d68:7fb2%utun2 prefixlen 64 scopeid 0xd 
    nd6 options=201<PERFORMNUD,DAD>
utun3: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1380
    inet6 fe80::e42a:c616:4960:2c43%utun3 prefixlen 64 scopeid 0x10 
    nd6 options=201<PERFORMNUD,DAD>
utun1: flags=8051<UP,POINTOPOINT,RUNNING,MULTICAST> mtu 1342
    inet 17...... --> 17.... netmask 0xff000000 
    inet6 fe80::93df:7780:862c:8a06%utun1 prefixlen 64 scopeid 0x12 
    nd6 options=201<PERFORMNUD,DAD>

谢谢

3 个答案:

答案 0 :(得分:0)

对于前四个问题,您可以找到here的一些信息,通常docker network是负责管理网络的人。

通常,我这样指定prots:

docker run -p 8443:8443 IMAGE

它有效。

对现有主题的引用为here

答案 1 :(得分:0)

1。。码头工人如何选择IP?

将docker安装到计算机中后,它将创建import net.minecraft.client.util.ITooltipFlag; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.EnumAction; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; import net.minecraft.util.ActionResult; import net.minecraft.util.EnumActionResult; import net.minecraft.util.EnumHand; import net.minecraft.world.World; import net.minecraftforge.fml.relauncher.Side; import net.minecraftforge.fml.relauncher.SideOnly; import javax.annotation.Nullable; import java.util.List; public class ItemLemonade extends Item { /** * This method needs to be overridden because otherwise the duration is too short, * the potion consumption won't animate correctly, and there won't be any sound */ @Override public int getMaxItemUseDuration(ItemStack stack) { return 32; } @Override public EnumAction getItemUseAction(ItemStack stack) { return EnumAction.DRINK; } @Override public ActionResult<ItemStack> onItemRightClick(World worldIn, EntityPlayer playerIn, EnumHand handIn) { playerIn.setActiveHand(handIn); return new ActionResult<>(EnumActionResult.SUCCESS, playerIn.getHeldItem(handIn)); } @SideOnly(Side.CLIENT) @Override public void addInformation(ItemStack stack, @Nullable World worldIn, List<String> tooltip, ITooltipFlag flagIn) { tooltip.add("Delicious, refreshing lemonade"); } } 界面。每当启动容器时,它将为您的容器提供IP地址。 您可以通过docker0命令验证docker0的IP范围。

2。。docker是否有选择的IP范围?

是,请参考我的答案1。

3。。如果我在同一主机上运行多个容器该怎么办?会有所不同吗?

是的,在您使用ifconfig创建自己的网络之前,它与docker0界面的范围有所不同,请参阅:Docker Networking

4。 docker network create提供了一些IP。那是什么IP,它从哪里得到?

这是docker网络的内部DNS,您可以在/etc/resolve.conf中提供DNS IP,如下所示在网上添加DNS服务器:

vi /etc/systemd/system/docker.service.d/docker.conf

5。。如何使用内部IP(例如[Service] ExecStart= ExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2376 -H unix:///var/run/docker.sock -g "/opt/docker_storage" --dns <replace-dns-ip>

连接到docker服务

您必须公开端口以像172.17.0.2一样进行连接 之后,您可以通过docker run -p 8443:8443 <image-name>telnet localhost 8443

连接

最重要

将以下内容添加到curl http://172.17.0.2:8443

/etc/sysctl.conf并通过

应用设置

net.ipv4.ip_forward = 1

希望这会有所帮助。

谢谢!

答案 2 :(得分:0)

Docker自己管理所有这些内部网络设备。这包括从专用范围分配IP(v4)地址,用于出站连接的NAT设置以及允许容器彼此通信的DNS服务。

稳定,合理的设置是:

  • 运行一次docker network create mynet,以创建一个非默认网络。 (Docker Compose会自动为您执行此操作。)
  • 使用--net mynet运行容器。
  • 当容器需要相互通信时,它们可以使用其他容器的--name作为DNS名称(您可以连接到http://other-container-name)。
  • 如果需要从其他地方到达容器,请使用docker run -p或Docker Compose ports:部分发布其服务端口。可以使用主机的DNS名称或IP地址以及发布的端口来访问它。
  • 从不(直接)使用容器专用IP地址。
  • 除非绝对确定localhost的含义,否则请不要使用。 (这是从运行容器的主机上运行的浏览器访问已发布端口的正确方法;几乎绝对不是您在容器内的意思。)

我看到的关于容器专用IP地址的问题通常在使用它们的 second 左右:因为您重新启动了容器并且IP地址已更改;因为它是从您本地的主机上运行的,现在您想从其他地方访问它。

要简要回答您的最初问题:(1-2)Docker从可配置的网络中为其分配它们自己,但通常默认为172.17.0.0/16; (3)不同的容器具有不同的私有IP地址; (4-5)Docker提供了自己的DNS服务,并且/etc/resolv.conf指向那里; (6)ICMP连接通常证明不多,您不需要ping容器(使用dignslookup进行DNS调试,curl进行实际的HTTP请求) )。