我正在MAC机器上运行docker映像,当我登录到容器时,我看到的IP地址为“ 172.17.0.2”(cat / etc / hosts)。
泊坞窗是否选择了任何IP范围?
如果我在同一主机上运行多个容器怎么办?会有所不同吗?
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
尝试过,
以上都不起作用。
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>
谢谢
答案 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>
您必须公开端口以像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地址以及发布的端口来访问它。localhost
的含义,否则请不要使用。 (这是从运行容器的主机上运行的浏览器访问已发布端口的正确方法;几乎绝对不是您在容器内的意思。)我看到的关于容器专用IP地址的问题通常在使用它们的 second 左右:因为您重新启动了容器并且IP地址已更改;因为它是从您本地的主机上运行的,现在您想从其他地方访问它。
要简要回答您的最初问题:(1-2)Docker从可配置的网络中为其分配它们自己,但通常默认为172.17.0.0/16; (3)不同的容器具有不同的私有IP地址; (4-5)Docker提供了自己的DNS服务,并且/etc/resolv.conf
指向那里; (6)ICMP连接通常证明不多,您不需要ping
容器(使用dig
或nslookup
进行DNS调试,curl
进行实际的HTTP请求) )。