Moby: Mac版Docker上没有docker0吗?

创建于 2016-05-16  ·  115评论  ·  资料来源: moby/moby

docker version

Client:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   5604cbe
 Built:        Wed Apr 27 00:34:20 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.11.1
 API version:  1.23
 Go version:   go1.5.4
 Git commit:   8b63c77
 Built:        Tue May 10 10:39:20 2016
 OS/Arch:      linux/amd64

docker info

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 21
Server Version: 1.11.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 25
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins: 
 Volume: local
 Network: null host bridge
Kernel Version: 4.4.9-moby
Operating System: Alpine Linux v3.3
OSType: linux
Architecture: x86_64
CPUs: 4
Total Memory: 1.954 GiB
Name: moby
ID: DFWG:ZZBI:QGZP:CAFF:PZVX:WLED:3XNK:J2LK:UV3V:X2JR:VCGJ:QFBK
Docker Root Dir: /var/lib/docker
Debug mode (client): false
Debug mode (server): true
 File Descriptors: 17
 Goroutines: 38
 System Time: 2016-05-15T23:53:58.530098977Z
 EventsListeners: 1
Registry: https://index.docker.io/v1/

其他环境详细信息(AWS,VirtualBox,物理等):

重现此问题的步骤:
1。
2。
3。

描述您收到的结果:
没有docker0,绝对没有办法通过网桥网关连接到在docker主机上运行的服务。
我已经尝试了所有一切,并以为自己会发疯,然后我在ubuntu主机上尝试了完全相同的事情,零问题

描述您期望的结果:
我希望能够连接到我的本地Redis和其他服务,而不必将它们泊坞窗...

kinquestion platfordesktop versio1.11

最有用的评论

由于Mac通常不是生产服务器,但不是很令人满意
开发机器。

在我的生产机器上,我不介意无法
连接到主机。

但是在开发计算机上,该计算机从内部连接到同一主机上的服务
容器正是需要此功能的场景
最。

所有115条评论

在virtualbox或主机上找到了ip?

我认为docker0在virtualbox虚拟机上。

我谈论的是用于beta的Mac码头工人,并且不通过vm进行工作

我也面临着完全相同的问题。 使用以下命令在docker计算机上找到主机的IP地址。 假设0.0.0.0代表主机,如果我在这里错了,请纠正我。
netstat -nr | grep'^ 0.0.0.0'| awk'{print $ 2}'
172.17.0.1

但是,当我使用我正在运行Web服务器的端口在该IP上卷曲时,它会拒绝连接。
卷曲172.17.0.1:9000
curl:(7)无法连接到172.17.0.1端口9000:连接被拒绝

不知道如何获得适当的修复。 这似乎给您带来麻烦,因为需要连接到将在主机上运行的服务。
还找到了一种通过在DOCKER_OPTS中设置主机IP地址的方法。
DOCKER_OPTS =“-H tcp://0.0.0.0 :5000 -H unix:///var/run/docker.sock --bip = 172.17.42.1 / 16”

但是我可以在Mac的哪个位置放置此选项? 在ubuntu上,它可以放在/ etc / default / docker中。

如果可以在Mac上修复此问题,请提供说明。

ping @justincormack也许您在这里有一些提示。

完全是@MiteshSharma ,这也是我尝试过的第一件事,但问题完全相同

@NinoFloris好像我们俩是完全一样的地方。 就我而言,我在主机上运行mysql。
大家好,
如果有人能够执行此操作,请进行更新。

我用这个
https://docs.docker.com/engine/installation/mac/

不知道您的Beta是否有特殊之处

@HackToday有所不同,那就是基于VirtualBox的Mac安装; Mac版Docker在beta.docker.com上

感谢@thaJeztah有关相关的Mac Docker架构或其他详细信息的任何可能好的文档链接? 似乎很有趣

@HackToday https://blog.docker.com/2016/03/docker-for-mac-windows-beta/提供了更多信息,并且有文档,但我认为只有在Beta中才可以。 https://beta.docker.com/docs/。 如果您注册了Beta,请给我“ ping”; 我可以尝试让您成为贡献者的优先列表:smile:

哦, @ thaJeztah,谢谢,我认为这是一种免费的工作和尝试。 不需要任何特殊的贡献。 在尝试之前,我会先阅读该博客以了解。 😺

@HackToday它是完全免费的,只是为了不让团队感到不知所措,因此决定首先将其发布为“私人”测试版,因为“许多用户===”许多支持问题”:smile:

嗨,是的,目前没有从Mac路由到docker0网桥的方法。 我们也许可以稍后添加它,但是通常我们建议您从容器或公开端口进行连接。 这与Linux上的docker overlay网络相同,您无法从主机连接到该网络。

由于Mac通常不是生产服务器,但不是很令人满意
开发机器。

在我的生产机器上,我不介意无法
连接到主机。

但是在开发计算机上,该计算机从内部连接到同一主机上的服务
容器正是需要此功能的场景
最。

我也需要这个docker0接口,以便在混合的“在主机上运行docker +(从IDE)运行应用程序”环境中使用。

当前最好的解决方案是从另一个容器连接到您的容器。 目前,由于Apple尚未解决的OSX问题,我们无法为这些容器提供路由。 我们正在跟踪此要求,但是目前我们无法采取任何措施。

以上评论正确吗?

我发现,可以从docker-for-mac-beta容器中找到docker主机,并将其连接到通常的172.17.0.1地址(假设服务绑定到0.0.0.0 )。

@igrayson这是因为容器位于带有
问题是从OSX路由到VM网络。

问题是从OSX路由到VM网络。

这不是我对OP问题的理解:

我希望能够连接到我的本地Redis和其他服务,而不必将它们泊坞窗...

我正在运行docker-for-mac-beta,通过连接到Redis和其他本地服务(在OSX上运行)没有问题,方法是让它们在0.0.0.0上监听,并使我的dockerized应用程序连接到172.17.0.1

总览

我也有同样的问题。 使用Docker版本1.11.1-beta14 (build: 8670) 984649fbd63d53a62b34f08b59694d4d569b74d5 。 我的pinata doctor说一切正常。

我无法卷曲主机中运行的服务,例如ExpressJS应用程序从容器内部监听端口3001

root<strong i="11">@e19fc8e02595</strong>:/# curl localhost:3001
curl: (7) Failed to connect to localhost port 3001: Connection refused

root<strong i="12">@e19fc8e02595</strong>:/# curl 0.0.0.0:3001
curl: (7) Failed to connect to 0.0.0.0 port 3001: Connection refused

root<strong i="13">@e19fc8e02595</strong>:/# curl 172.25.8.25:3001
{"status":200} 
root<strong i="14">@e19fc8e02595</strong>:/#

_注意: 172.25.8.25是我的WiFiIP。_

皮纳塔

$pinata list
These are advanced configuration settings to customize Docker.app on MacOSX.
You can set them via pinata set <key> <value> <options>.

🐳  hostname = docker
   Hostname of the virtual machine endpoint, where container ports will be
   exposed if using nat networking. Access it via 'docker.local'.

🐳  hypervisor = native (memory=4, ncpu=6)
   The Docker.app includes embedded hypervisors that run the virtual machines
   that power the containers. This setting allows you to control which the
   default one used for Linux is.

 ▸  native: a version of the xhyve hypervisor that uses the MacOSX
              Hypervisor.framework to run container VMs. Parameters:
              memory (VM memory in gigabytes), ncpu (vCPUs)


🐳  network = hostnet (docker-ipv4=192.168.65.2, host-ipv4=192.168.65.1)
   Controls how local containers can access the external network via the
   MacOS X host. This includes outbound traffic as well as publishing ports
   for external access to the local containers.

 ▸ hostnet: a mode that helps if you are using a VPN that restricts
              connectivity. Activating this mode will proxy container network
              packets via the Docker.app process as host socket traffic.
              Parameters: docker-ipv4 (docker node), host-ipv4 (host node)
 ▸     nat: a mode that uses the MacOS X vmnet.framework to route container
              traffic to the host network via a NAT.

🐳  filesystem = osxfs
   Controls the mode by which files from the MacOS X host and the container
   filesystem are shared with each other.

 ▸   osxfs: a FUSE-based filesystem that bidirectionally forwards OSX
              filesystem events into the container.


🐳  native/port-forwarding = true
   Expose container ports on the Mac, rather than the VM

 ▸    true: Container ports will be exposed on the Mac
 ▸   false: Container ports will be exposed on the VM

🐳  daemon = run 'pinata get daemon' or 'pinata set daemon [@file|-]>
   JSON configuration of the local Docker daemon. Configure any custom
   options you need as documented in:
   https://docs.docker.com/engine/reference/commandline/daemon/. Set it
   directly, or a <strong i="20">@file</strong> or - for stdin.

可能的重复,参考,帮助等

我遇到类似问题,发现172. * ips不允许我连接到绑定到0.0.0.0的本地mysql实例。

我可以使用主机上的任何可路由IP地址连接到它。 ifconfig并找到您的一个。

现在如何将其动态放入容器中?

@Kazanz (MySQL在本地/未包含的系统上运行)存在相同的问题,

ping @londoncalling ^^

关于这个有什么消息吗? 因为在Ubuntu(主机)中,主机可以使用IP 172.17.*.*.来访问容器中监听0.0.0.0的应用程序。 因此,在运行容器时无需公开端口。

在Mac Beta的Docker上,我无法这样做,因为docker0缺失。 希望它能在最终版本上得到解决:)

@thaJeztah @astasoft我今天将调查一下,谢谢@

我的理解是您的问题是从容器访问Mac上运行的服务。
如果是这样,您可以使用en0接口公开的ip地址进行操作。
ifconfig en0 | grep“ inet” | 剪切-d“” -f2

例如,如果我的Mac上的端口80上运行着Web服务器:
docker run -it tutum / curl curl ifconfig en0 | grep "inet " | cut -d " " -f2

有用!

您可以在环境变量中设置该ip并将其传递到您的容器,就像我在https://github.com/chanezon/docker-tips/blob/master/x11/README.md中为X11服务器所做的那样

@chanezon我能够使它工作,但似乎并不理想,因为此IP经常根据您所连接的网络而变化。 我希望设置一个或多或少的静态IP来代表我的本地docker bridge。

@londoncalling谢谢,

@chanezon不,我的情况是从Host访问服务到容器。 在某些情况下,我想在主机上的端口80和容器中的同一端口上运行Web服务器。 如果将容器端口80暴露给主机,则将无法在主机上运行Web服务器。 这种设置对我的开发来说很重要。

我当前的解决方法是回到Mac的Docker Toolbox,并在Virtualbox的Boot2Docker实例上进行端口转发。

sudo iptables -t nat -A PREROUTING -d 192.168.99.100/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 172.17.0.2:80

然后我可以使用boot2docker IP 192.168.99.100:80在容器中调用服务。

curl -i http://192.168.99.100

因此,我遇到了以下问题,它可能与此有关。
只是为了清楚起见,我正在运行Docker Beta for Mac 1.12.0-beta21 (build: 10868)

基本上,我无法使用172.17.0.2 IP地址从主机连接到容器,因为没有分配了172.17.0.1地址的docker0接口。

容器是ubuntu映像,这是网络相关信息

root<strong i="12">@app</strong>:~# ifconfig
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02
          inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:524 errors:0 dropped:0 overruns:0 frame:0
          TX packets:370 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:217502 (217.5 KB)  TX bytes:40451 (40.4 KB)

root<strong i="13">@app</strong>:~# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
default         172.17.0.1      0.0.0.0         UG    0      0        0 eth0
172.17.0.0      *               255.255.0.0     U     0      0        0 eth0

主机是MacbookPro,如您在下一个代码段中所见,它没有IP地址172.17.0.1 docker0 (或与此相关的任何接口),该地址在容器中分配为网关。

robert<strong i="19">@localhost</strong> $ ifconfig
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 16384
    options=3<RXCSUM,TXCSUM>
    inet6 ::1 prefixlen 128
    inet 127.0.0.1 netmask 0xff000000
    inet6 fe80::1%lo0 prefixlen 64 scopeid 0x1
    nd6 options=1<PERFORMNUD>
gif0: flags=8010<POINTOPOINT,MULTICAST> mtu 1280
stf0: flags=0<> mtu 1280
en0: flags=8823<UP,BROADCAST,SMART,SIMPLEX,MULTICAST> mtu 1500
    ether f4:5c:89:c9:be:0d
    nd6 options=1<PERFORMNUD>
    media: autoselect (<unknown type>)
    status: inactive
en1: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
    options=60<TSO4,TSO6>
    ether 6a:00:02:06:b7:f0
    media: autoselect <full-duplex>
    status: inactive
en2: flags=963<UP,BROADCAST,SMART,RUNNING,PROMISC,SIMPLEX> mtu 1500
    options=60<TSO4,TSO6>
    ether 6a:00:02:06:b7:f1
    media: autoselect <full-duplex>
    status: inactive
p2p0: flags=8802<BROADCAST,SIMPLEX,MULTICAST> mtu 2304
    ether 06:5c:89:c9:be:0d
    media: autoselect
    status: inactive
awdl0: flags=8902<BROADCAST,PROMISC,SIMPLEX,MULTICAST> mtu 1484
    ether 0e:f1:f1:4d:46:88
    nd6 options=1<PERFORMNUD>
    media: autoselect
    status: inactive
bridge0: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=63<RXCSUM,TXCSUM,TSO4,TSO6>
    ether f6:5c:89:9c:e6:00
    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 5 priority 0 path cost 0
    member: en2 flags=3<LEARNING,DISCOVER>
            ifmaxaddr 0 port 6 priority 0 path cost 0
    nd6 options=1<PERFORMNUD>
    media: <unknown type>
    status: inactive
en4: flags=8863<UP,BROADCAST,SMART,RUNNING,SIMPLEX,MULTICAST> mtu 1500
    options=10b<RXCSUM,TXCSUM,VLAN_HWTAGGING,AV>
    ether 39:c9:87:45:22:ee
    inet6 fe80::3ac9:86ff:fe40:22de%en4 prefixlen 64 scopeid 0x9
    inet 192.168.1.123 netmask 0xffffff00 broadcast 192.168.1.255
    nd6 options=1<PERFORMNUD>
    media: autoselect (1000baseT <full-duplex,flow-control>)
    status: active

一些同事在Ubuntu主机上可以正常工作,因此我猜测这是Mac问题或本地环境。
任何想法?

@robertoestivill不确定确切的用例,但是如果该容器发布了端口,则可以通过localhost:port访问它

@nikdavis如果您想要一个稳定的IP,可以将一个IP(您永远不会路由到的IP)添加到Mac的lo0回送接口并使用它。

嗨,恕我直言,这与linux上的docker有很大的不同。 有很多文档根本不适用。 我也不太了解网络,不知道如何将另一个ip附加到lo0,然后再附加什么。 如果有针对此问题的解决方法的描述(不涉及boot2docker),并在文档中进行提及,则将非常有帮助。

@justincormack @chanezon我们可以一起工作以获得有关此问题的一些好的文档吗?

@ pourquoi42
您可以将另一个IP添加到lo0接口,如下所示:
CONTAINER_IP = $(docker inspect --format'{{.NetworkSettings.IPAddress}}'容器名称)
ifconfig lo0别名$ CONTAINER_IP

删除它:
ifconfig lo0-别名$ CONTAINER_IP

@itilk似乎不适用于namescontainer id

robert<strong i="9">@work</strong>:~ $ docker ps
CONTAINER ID        IMAGE               COMMAND             CREATED              STATUS              PORTS               NAMES
d047790e196a        group/name              "/bin/bash"         About a minute ago   Up About a minute                       jovial_goodall

robert<strong i="10">@work</strong>:~ $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' jovial_goodall

robert<strong i="11">@work</strong>:~ $ docker inspect --format '{{ .NetworkSettings.IPAddress }}' d047790e196a

robert<strong i="12">@work</strong>:~ $

我在达尔文(Darwin)上运行了Docker 1.12.0(build 10871),
1)所有的docker容器都可以正常工作;
2)容器可以与主机通讯;
3)容器之间的通讯正常;

docker0虚拟接口在哪里? 或者有什么方法可以让主机连接到容器?

伤心阅读本:已知限制在OSX

Known Limitations
There is no docker0 bridge on OSX
Because of the way networking is implemented in Docker for Mac, you cannot see a docker0 interface in OSX. This interface is actually within HyperKit.

I can’t ping my containers
Unfortunately, due to limtations in OSX, we’re unable to route traffic to containers, and from containers back to the host.

因此,到目前为止,我们只是将主机连接到容器的一种方法:端口映射

Version 1.12.0-beta21 (build: 11019)
1)所有docker容器都可以正常工作。
2)容器无法与主机通信。
3)容器之间的通讯正常。
4) docker0不可用。

广告2)

我有在端口1313上绑定到0.0.0.0 hugo实例。 正在运行的容器中的curl返回: curl: (7) Failed to connect to 172.19.0.1 port 1313: Connection refused
使用ifconfig en0 | grep "inet " | cut -d " " -f2返回的IP地址也不起作用:
curl: (7) Failed to connect to 172.19.27.228 port 1313: No route to host

大家好,

我从其他容器产品(不是docker )中找到了一篇文章: https :

最后,它提到:

您也可以使用路由而不是上述端口转发来访问容器中的应用。 路由将使VM内的整个容器子网在主机上可用。

如果您希望使用路由而不是端口转发,这就是它的工作原理。 路由命令需要在主机上运行。

如果您的VM IP为192.168.64.3且容器子网为10.0.3.0/24,则可以使用以下命令创建路由

sudo route -n add 10.0.3.0/24 192.168.64.3

Xyhve自动为VM网络创建bridge100接口。 运行快速的ifconfig来检查网桥100处于打开状态,例如en4,然后运行以下命令。

sudo ifconfig bridge100 -hostfilter en4

现在,您应该能够直接从主机对VM中的任何容器执行ping操作

ping 10.0.3.175

要在您的主机浏览器上访问该应用程序,请使用端口转发如上所述在主机上编辑/ etc / hosts文件,但这一次将容器IP与应用程序URL关联。

抱歉,我对linux网络知识一无所知,但这是一种解决方法?

我不知道如何获取在xhyve中运行的vm(带有docker的阿尔卑斯山)的IP地址,有什么想法吗?

@Kaijun ,我没有安装Docker Machine,而您的bridge100来自哪里?

@junjiemars不,我发布的文章与

我想如果我们能从本文或本产品中获得启发,并将相同的变通方法应用于Docker本身。

@Kaijun ,我知道可能有一种方法可以破解xhyve来完成任务,如果完成了,请分享您的黑客技巧。

@nikdavis如果需要稳定的IP,可以将IP(永远不会路由到的IP)添加到Mac的lo0回送接口,然后使用它。

@justincormack您介意如何更精确地实现这一目标吗? :)
我尝试了@itilk发布的内容,但对我而言不起作用。

一般而言:在Mac beta版的docker中是否存在重新引入docker0网络的ETA?

谢谢

@georgehrke,您可以执行sudo ifconfig lo0 alias 10.200.10.1/24 -显然选择一个您不会在本地找到的地址。 然后,无论您是否有网络连接,都可以使用该地址与主机对话。

抱歉,没有更准确地说明我的问题。

我不是在尝试从容器连接到主机,而是尝试另一种方式。
我无法从主机直接连接到容器。

我正在使用docker inspect container_name来获取IP。
但是我既不能ping也不能在浏览器中打开它,即使Dockerfile有一个Web服务器并且其中有EXPOSE 80

是的,有两个独立的问题,它们在某种程度上是相关的。

  1. 我想从容器连接到主机上的服务。 Mac具有可更改的IP地址,如果没有网络访问权限,则没有IP地址。

当前的建议是将未使用的IP附加到Mac上的lo0接口上,例如sudo ifconfig lo0 alias 10.200.10.1/24 ,确保您的服务正在侦听此地址或0.0.0.0 (即不是127.0.0.1 )。 然后,容器可以连接到该地址。

  1. 我想从Mac连接到容器。

当前建议是发布端口,或从另一个容器连接。 请注意,即使容器在覆盖网络而不是桥接网络上,这也是在Linux上也必须执行的操作,因为这些容器未路由。

我们知道这些都不是理想的,但是存在一些问题,尤其是OSX中的错误,该错误仅在10.12中修复,并且据我们所知,并没有被反向移植,这意味着我们无法在所有受支持的OSX中支持该错误。版本。 另外,此网络设置将需要root用户访问权限,而我们正试图在Mac的Docker中完全避免使用root用户访问权限(我们目前正在尝试删除非常小的root helper)。

@londoncalling您是否要将此摘要添加到文档中?)

@justincormack您的意思是macOS Docker上的所有--net=host都没用吗?

@ m1ome并不是完全没有用的-当在VM上打开端口时,您可以从其他容器连接到您在其中运行的服务,但是人们希望那里的服务可以在Mac上使用,例如发布的端口,我们还没有得到仍然可以正常工作,因为这相当复杂(我们不会像这样使用打开的端口,而为已打开的端口提供事件提要,这与我们使用docker事件的端口不同)。

@justincormack现在至少可以解决此问题了吗? 如果Docker有它,我认为将其记录在文档中将非常有用。

@justincormack我可以将您的

@londoncalling一定会给您发送一些

在2016年8月30日下午6:28,“ Victoria” [email protected]写道:

@justincormack https://github.com/justincormack我可以添加您的文章
文档,但我认为我们应该包括一些具体示例。 我会尽力
自己解决,但可能需要您或他人的帮助。 生病
在我研究过程中,尽快与您联系。

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/docker/docker/issues/22753#issuecomment -243515932,
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAdcPPgFU3H6TZCLcI0yUvbPn4tPwZj7ks5qlGhUgaJpZM4Ie9PB

@justincormack谢谢-考虑到该线程,我认为我们至少需要两个示例,甚至三个,如下所示。 你怎么看?

  1. 如何从容器访问Mac主机上的服务的示例(例如,使该应用成为nginx类的Web服务器连接到主机上的Redis数据库是否可行?)
  2. 从Mac连接到容器的示例。 当前的nginx示例是否涵盖第二种情况,因为我们在run命令中公开了端口; 即docker run -d -p 80:80 --name webserver nginx@justincormack,但我们应该在下面的@weaver注释中显示是否带有端口映射,所以这里可能有两个不同的用例?
  3. 如何在一个使用另一个容器中的服务的容器中运行应用程序的示例(例如,重复nginx加上redis示例,但这次在容器中运行redis?

An example of connecting to a container from the Mac. Does our current nginx example cover the second case, since we expose a port in the run command; i.e., docker run -d -p 80:80 --name webserver nginx?

我真的很希望从Mac连接到不涉及端口映射的容器的示例。 我的用例正在运行一个mesos集群以进行本地开发。 如果端口映射是完成从Mac与容器(从属)直接通信的唯一方法,则它需要进行额外的工作以确保每个mesos从属进程都在唯一的端口上运行,以便从Mac进行任何访问(查看日志以进行调试,示例)与mesos内部使用的端口一致(否则,mesos框架将URL渲染到仪表板中,而内部端口号无法在主机上使用)。

现在,我将docker-machine与从Mac到虚拟网络的路由一起使用,以便mesos群集使用的所有IP地址和端口号在Mac上都是“正常工作”。 这是一个非常简单的解决方案。

如上所述

@justincormack我阅读了所有线程,试图弄清楚如何将Mac连接到容器,就像在Linux上一样:例如container-ip:8080。 据我了解,这在MacOS(10.12)中应该可行,对吗?

@matiasserrano,您可以在docker run -p 8080:8080进行端口映射

@ m1ome是的,我知道。 但是对我来说是不可扩展的。 我是一名开发人员,通常使用apache / Nginx运行多个容器,因此始终使用80。 如果我按照您的建议去做,首先我需要在Mac上禁用apache,其次我需要一次运行一个容器,因为它们共享相同的端口。 不能使用其他端口。
另一方面,我们将容器交给开发人员开始工作,而他们又可以同时从事多个项目。
因此,使用Mac的IP从Mac连接到容器是我们必须的。

@matiasserrano为什么不使用-P自动将裸露的端口转发到任意高端口? 如果您正在通过docker inspect之类的内容查找容器IP,则还可以对暴露的端口执行非常类似的操作。

@nathanleclaire问题不在于了解端口或容器的IP,基本上与上

对于它的价值,我有一个与@weaver相似的用例(即直接从主机访问容器网络)。 我通过Docker在自己的网络上运行Spark集群。 我使用docker-machine并在docker0接口上为群集使用的子网添加了静态路由。

Spark UI在主节点上可用,并且包括指向所有其他群集节点的HTML链接(通过其IP地址)。 通过添加静态路由,我可以直接从我的开发机器访问主服务器上的Spark UI,并且它生成的到集群中其他节点的链接都可以正常工作。 这些链接还意味着,不只是主机无需docker0就可以运行转发端口7080的情况-我需要能够以某种方式访问​​整个网络。

我想目前的一种解决方法是通过nginx或其他容器中的另一个Web代理进行一些智能路由,尽管我目前尚无此功能的示例。

@nathanleclaire问题不在于了解端口或容器的IP,基本上与上

我不明白

你说:

因此,使用Mac的IP从Mac连接到容器是我们必须的。

为什么要专门设置不同的IP地址? 您将端口冲突描述为此处的问题:

我是一名开发人员,通常使用apache / Nginx运行多个容器,因此始终使用80。 如果我按照您的建议去做,首先我需要在Mac上禁用apache,其次我需要一次运行一个容器,因为它们共享相同的端口。

使用-P ,即使两个容器都在内部侦听80,也不会有两个容器暴露相同的端口。 那么,为什么还需要禁用Apache等?

另一个解决方案是为每个项目创建一个无所事事的VM,然后在内部运行docker或使用docker-machine,这基本上是相同的。 两种解决方案都不适合我们。 我们更喜欢使用Vagrant。

如果您坚持要使用Vagrant,而不会使用Docker Machine或Mac的Docker,为什么要在此处归档/讨论?

@nathanleclaire在Linux中,使用我创建的容器,例如,如果我想同时运行4个容器,这些容器将暴露端口80。IE:一个用于Magento,一个用于Drupal,一个用于Larabel,另一个用于清理阿帕奇。

每个容器都有一个IP,例如192.100.200.1、192.100.200.2、192.100.200.3和192.100.200.4。

使用这些IP,我将一个主机添加到我的/ etc / hosts文件中,并为每个主机添加一个别名,例如:

192.100.200.1 magento.local
192.100.200.2 drupal.local
192.100.200.3 larabel.local
192.100.200.4 apache.local

然后直接从浏览器输入服务器。

在Mac中,我无法做到这一点,因为我无法为每个容器获取IP。 使用-P是不可行的,因为除了为每个容器使用别名之外,我还需要对Magento使用类似于localhost:8012的方法,对于drupal使用localhost:9823的方法。

另一个解决方法是为每个容器在内部运行容器并使用端口映射80:80使用vagrant与Linux VM。 使用此解决方案,docker毫无意义,因为如果我创建一个Vagrant机器,并且与docker容器具有相同的功能,那也是一样的。 (我知道Docker和Vagrant之间的区别,我更喜欢Docker而不是Vagrant 100倍...)

我希望这个用例可以帮助您理解为什么对于我们来说获得容器IP如此重要。

该示例使用端口80,但适用于所需的任何端口。

@matiasserrano好的,我怀疑这可能与期望DNS /主机名映射有关,谢谢。

存在相同的问题(从容器连接到主机)。 使用192.168.65.1为我工作。 不能完全确定这是什么,但我认为它会短暂出现在@thalesfsp的pinata日志中:

🐳  network = hostnet (docker-ipv4=192.168.65.2, host-ipv4=192.168.65.1)
   Controls how local containers can access the external network via the
   MacOS X host. This includes outbound traffic as well as publishing ports
   for external access to the local containers.

(感谢@feedthefire向我展示了这个!)

如果您坚持要使用Vagrant,而不会使用Docker Machine或Mac的Docker,为什么要在此处归档/讨论?

@nathanleclaire这是一个毫无用处的回应,甚至暗示人们不同意也不应抱怨。 这种态度将使Docker在社区讨论中不受欢迎。

感谢@cpoonolly ,您的回答非常有用,但是我认为您的解决方案的工作方向相反:容器尝试连接到Mac Host。 我所需要的恰恰相反:Mac Host尝试使用其IP连接到容器。

嘿伙计。 这个问题已经蔓延到各个方向,我建议docker / docker维护者将其关闭并将其拆分为几个子问题。 例如,一个用于从D4M VM内部访问Mac的IP,另一个用于每个容器的IP可寻址性(尽管我认为这可能会更好,因为仅支持D4M中本地的容器DNS /主机名映射)。 最有可能在Docker for Mac回购中,因为这是“引擎”的存储库,理想情况下,在跟踪器中应该有关于Linux / Windows上的Engine问题的票证。

对于它的价值,在Docker for Mac VM中肯定有一个docker0桥。 如果您使用--net host运行容器并运行ifconfig则可以自己查看。 但是,这里的各种问题与原始标题的含义无关:它们与容器和VM网络以及可见性有关。

@icecrime @justincormack您如何看待。 谢谢大家

@nathanleclaire,这是一个更好的回复,谢谢,我完全同意,将几个子问题分解成一个不错的解决方法

我同意!!!! 没问题的话!

@nathanleclaire @justincormack ,与此同时,Beta 25文档(将在今天发布,与应用程序发布相比有些滞后)将在网络和FAQ主题中为Justin和Nathan提供解决方法的建议。 尽管我知道它不能解决每个人的问题,但是这将是在文档中提供一些解决方案并确认问题的开始。

在下一个Beta中的@matiasserrano (将于周二发布),您将能够在主机的不同IP地址上发布端口。 因此,如上所述,如果您将多个地址添加到回送接口,然后将其添加到主机文件中,则可以将不同的容器发布到这些地址的每个端口上的端口80,并使用主机名。

因此,如果您添加

192.100.200.1 magento.local
192.100.200.2 drupal.local
192.100.200.3 larabel.local
192.100.200.4 apache.local

/etc/hosts则可以执行以下操作:

sudo ifconfig lo0 alias 192.100.200.1/24
sudo ifconfig lo0 alias 192.100.200.2/24
sudo ifconfig lo0 alias 192.100.200.3/24
sudo ifconfig lo0 alias 192.100.200.4/24

然后

docker run -p 192.100.200.1:80:80 magento
docker run -p 192.100.200.2:80:80 drupal
...

那么您应该可以直接连接到drupal.local等。

@londoncalling,我们应该在下一个beta文档中对此进行记录。

@justincormack nitpick:这个区块正确吗?

$ ifconfig lo0 alias 192.100.200.1/24
$ ifconfig lo0 alias 192.100.200.2/24
$ ifconfig lo0 alias 192.100.200.2/24
$ ifconfig lo0 alias 192.100.200.2/24

后两个应该是192.100.200.3192.100.200.4吗? 以及为什么要对整个cidr进行别名( 192.100.200.1/24192.100.200.0192.100.200.255完整范围,对吗?)? 应该只是一个IP吗?

对不起,错字。 是的, /32也可以。

@justincormack DNS会很快在gui接口中吗? 由于beta25仍然无法通过拆分隧道vpn解析dns名称,因此我希望在Mac主机上运行dnsmasq。 我的Mac上的所有其他端口都可以通过192.168.65.1从容器内部访问,但不能从dns访问。

另外,为什么docker在/etc/resolv.conf中设置10 ip的[192.168.65.1到10]?
PS:请勿使用192.100.xx,因为这是公共范围。 使用192.168.xx

我们正在尝试避免将DNS添加到接口中,但请阅读
从Mac进行设置。 我们读取了主机文件,但将读取所有
设置很快。

主机文件地址映射到您的主机文件解析器,但自动换行
周围,​​以便故障转移正常工作。

2016年9月11日晚上7:09,“ Jijo Varghese” [email protected]写道:

@justincormack https://github.com/justincormack DNS是否会在GUI中
界面会很快出现吗? 由于beta25仍然无法解析DNS名称
通过拆分隧道VPN我希望在Mac主机上运行dnsmasq。 所有其他
我的Mac上的端口可以通过192.168.65.1从容器内部访问,但是
不是DNS。

另外,为什么docker在/etc/resolv.conf中设置10 ip的[192.168.65.1到10]?
PS:请勿使用192.100.xx,因为这是公共范围。 使用192.168.xx

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/docker/docker/issues/22753#issuecomment -246194539,
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAdcPEQcEyn3w7BPJCeaz5mlbgJx5etTks5qpEPUgaJpZM4Ie9PB

我只想感谢@justincormack

是的,有两个独立的问题,它们在某种程度上是相关的。

  1. 我想从容器连接到主机上的服务。 Mac具有可更改的IP地址,如果没有网络访问权限,则没有IP地址。
    当前的建议是将未使用的IP附加到Mac的lo0接口上,例如sudo ifconfig lo0 alias 10.200.10.1/24 ,确保您的服务正在侦听此地址或0.0.0.0(即不是127.0.0.1)。 然后,容器可以连接到该地址。

虽然不理想,但现在应该对我们有用。 (经过测试和工作)

@justincormack

我们试图避免将DNS添加到界面中,而只是从Mac中读取设置。
VPN组合是多种多样且复杂的,因此假设您始终可以阅读正确的设置可能是短视的。 https://github.com/docker/for-mac/issues/19 (关闭)在split-tunnel vpn上仍然对我们不利。 这可能不是docker问题,而是我们的vpn服务器如何执行split-dns。

另一个例子,例如在我之前的位置,我们将告诉质量检查和开发人员要根据他们想要的环境来指向不同的名称服务器。 如果仅在Docker内部需要这种类型的测试,则这是要考虑的另一个用例。 谢谢。

我们正在致力于VPN的拆分名称服务器支持。

在2016年9月13日下午6:48,“ Jijo Varghese” [email protected]写道:

@justincormack https://github.com/justincormack

我们正在尝试避免将DNS添加到接口中,但请阅读
从Mac进行设置。
VPN组合是多种多样且复杂的,因此它是短视的
假设您总是可以阅读正确的设置。 码头工人/ for-mac#19
https://github.com/docker/for-mac/issues/19 (关闭)仍然损坏
对我们来说就是分割隧道VPN。 这可能不是docker问题,而是如何
我们的VPN服务器执行split-dns。

另一个例子,在我之前的位置,我们将告诉质量检查和开发人员指出
到不同的名称服务器,具体取决于他们想打的env。 如果说
仅在Docker内部需要测试类型,这是另一种用途
要考虑的情况。 谢谢。

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/docker/docker/issues/22753#issuecomment -246764433,
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAdcPDXx3ziQv81fPBXpQHvU7_j9YWKQks5qpuHdgaJpZM4Ie9PB

非常感谢@justincormack ,我能够通过别名lo0来使用您的变通方法直接访问我的所有容器,这使我开始使用Docker for Mac:+1

我正在使用docker-compose运行我的容器,因此最后一个麻烦是需要配置端口转发以将每个容器绑定到主机上的正确IP地址。 (当我有多个容器时,绑定到0.0.0.0会给我端口冲突)。

我不确定是否有人找到解决方法? -我实际上需要插值到docker-compose配置中,因为IP地址直到容器启动才知道。

(请注意,我们正在偏离原始问题)。

@NoOrdInaryGuy,这应该适用于最新版本(稳定版和Beta版)-您可以指定Mac上要绑定到的特定IP,例如lo0上的地址。

@justincormack是的,我可以确认它可以成功运行。 唯一的问题是使用docker-compose (尤其是缩放时,或者我想您可以只配置静态地址)。 启动容器后无法添加端口转发,并且我不知道在“运行时”将实际容器IP地址引用到组合文件/ Dockerfile的方法,我认为我需要按顺序进行配置端口转发以侦听正确的IP。

目前,我正在通过不使用docker-compose并使用自定义bash脚本来调用docker的方法来解决此问题,但我想知道是否还有其他人想到了更好的解决方案。

这看起来很有希望。

我的用例类似于其他人所说的。 我们创建运行Java服务的容器,并尝试从主机系统测试这些服务。 我们在jenkins管道中运行测试,因此将端口发布到主机系统是有问题的,因为主机系统可能正在运行多个试图绑定相同端口的容器。

因此通常,我们只“公开”端口,然后使用“ docker inspect”发现容器IP并连接到该IP上的服务端口。 当开发人员想要在Mac上尝试测试时,我们一直在使用boot2docker技巧通过VirtualBox VM向容器添加静态路由。

我一直在观看Mac Beta,希望我们能够使用类似的方法来访问暴露的端口,而这个lo0别名的窍门就像票证一样。

这可能不是功能请求的地方,但我想知道是否可以将IP添加为docker run publish-all选项的输入。 我看起来像这样:

sudo ifconfig lo0别名10.200.10.1/32
docker run --publish-all 10.200.10.1 -d --name网络服务器my_test_image

然后,如果my_test_image中有多个端口EXPOSED,我可以通过IP别名访问它们。

我可以在最新的docker-mac中确认缺少的docker0


MacBook $ docker version
Client:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.7.1
 Git commit:   6f9534c
 Built:        Thu Sep  8 10:31:18 2016
 OS/Arch:      darwin/amd64

Server:
 Version:      1.12.1
 API version:  1.24
 Go version:   go1.6.3
 Git commit:   23cf638
 Built:        Thu Aug 18 17:52:38 2016
 OS/Arch:      linux/amd64
MacBook$ docker info
Containers: 7
 Running: 0
 Paused: 0
 Stopped: 7
Images: 107
Server Version: 1.12.1
Storage Driver: aufs
 Root Dir: /var/lib/docker/aufs
 Backing Filesystem: extfs
 Dirs: 133
 Dirperm1 Supported: true
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: host bridge null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Security Options: seccomp
Kernel Version: 4.4.20-moby
Operating System: Alpine Linux v3.4
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 1.953 GiB
Name: moby
ID: W53J:DFZB:4SCO:CS34:6CRF:FCDR:74RZ:TBJC:WZ35:QUVW:NZQU:7ANZ
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): true
 File Descriptors: 17
 Goroutines: 29
 System Time: 2016-09-26T00:20:31.292958501Z
 EventsListeners: 1
No Proxy: *.local, 169.254/16
Registry: https://index.docker.io/v1/
Insecure Registries:
 127.0.0.0/8

我的需求与原始帖子相反。 我想从主机访问固定的容器地址,例如172.17.0.3 。 例如,我将运行一个Web应用程序,并且我想从主机访问它。 我不想做讨厌的端口转发,这在没有docker0作为主机上的接口的情况下是必需的。 VirtualBox具有仅主机的网络,我可以从主机与该仅主机的网络通信。

如果我的主机是linux,则会看到docker0; 它只在docker-mac中丢失。 我也不想使用virtualbox在Mac上运行docker。

如文档中所述:某些错误已在10.12中修复

我们知道这些变通办法并不理想,但是存在一些问题。 尤其是_ ,OSX中存在仅在10.12中修复的错误_,据我们所知,并没有反向移植,这意味着我们不能在所有受支持的OSX版本中都支持此错误。

所以我会问,Docker是否已经在10.12中解决了这个问题? 还是所有版本的兼容性都没有。

@Kaijun不,我们需要支持多个版本的OSX,并且以前的操作方式还存在其他问题,因此我们不太可能恢复使用它。

嗨,我真的很感谢这个线程中的所有讨论。 我想知道:有人能总结一下(或指向我)OS X的实际问题,该问题使我们无法直接建立通往容器的路由?

我已经看到了有关OS X(这里和其他线程)有什么问题的评论。 我似乎找不到真正问题的确切描述,为什么10.12固定排序等。

(1)为什么这对于诸如virtualbox / docker-machine之类的东西却不起作用,而对于xhyve不起作用?

(2a)即使docker不能仅在10.12版本上支持此功能,但是如果我运行10.12来对其进行破解并使其正常工作,我还能做些什么吗?

(2b)“我们之前所做的方式”有哪些“其他问题”?

如果这些是愚蠢的问题(或者答案已经在该主题中而我错过了),我真的很抱歉。

谢谢。

@weaver我们以前在https://github.com/docker/hyperkit上使用vmnet选项,该选项的确为VM创建了网桥,该网桥允许从容器路由到网桥IP上的主机。 但是,它并不能有效地允许路由到容器。 有一个与此相关的CVE,它在启用时公开了开放的DNS服务器,该问题已在Sierra中修复。

vmnet模式还有许多其他缺点:不支持IPv6,控制很少,我们必须以root身份运行,不能与许多VPN设置一起使用等等。 我们开始使用“ VPN模式”作为选项,它成为当前的默认选项,然后在安全问题后删除了另一个选项。

docker0网桥在Mac而不是Linux VM上似乎是魔术般的选项从未实现过,而且实际上并没有实现,这与使用远程主机时不可用的方式相同。 但是,人们已经开始使用各种方式来使用各种路由设置,我们希望尝试适应其中的一些用例,但这并不是一件容易的事。 Virtualbox会在Mac中安装内核模块来执行此操作,而我们不会这样做。

你好

首先,请让任何人停止对portforwarding的答复。 我们知道这一点,但我们不希望如此,因为正如现在发布的那样,我们希望在IP访问上使用简单的端口。
我们可以尝试保留有关解决方案的主题吗?
令我惊讶的是,这是不可能的。 我不明白为什么只要网络是可路由的,为什么我们本身需要在Mac上架桥?

因此,对于所有想要的人:删除mac版的docker,安装docker工具箱,然后运行以下命令:
sudo路由-n添加172.17.0.0/24 192.168.99.100
其中172.xxx是在VirtualBox主机中配置的docker网络,而192.xxx是来自该主机的实际IP,该主机可以在Mac上通过VirtualBox网络接口进行路由。
它只是将流量正确路由。

可以将其添加到Docker文档中吗?

由于上述内容满足了我的需求,因此我没有进一步研究xhyve。
解决方案不是输入与上述命令类似的命令,该命令可与该命令一起用于网络设置吗? 我无法ping 192.168.65.x地址,因此无法添加路由。 如果有人发布命令以启用该功能,则route命令也应该起作用。

问题解决了? 如果这些文件记录在描述mac限制的位置,那将是很好的。
谢谢

@justincormack @ dmp42 @jeanlaurent您可以直接在上方查看@VGerris评论,并让我知道您希望/在何处将此文档记录为re:Toolbox和d4mac吗?

如果系统上没有所需的10.12修复程序,是否有可能针对10.12修复此问题并引发错误/警告? 然后,您可以为运行10.11的人员记录/ etc / host或工具箱的解决方法。

Imho能够从主机访问容器网络而无需端口转发或手动网络配置,这是docker的基本功能。 事实并非如此,这确实是一个重大问题。

@justincormack-在今天的测试版发布后,它仍然不适用于我们拆分的dns配置。

从上面重复。

我们正在尝试避免将DNS添加到接口中,但请阅读
从Mac进行设置。

VPN组合是多种多样且复杂的,因此假设您始终可以阅读正确的设置可能是短视的。

@justincormack您没有为Docker for mac用户提供任何解决方案,因此对IP的访问非常必要,因为使用docker开发需要从docker-container和主机直接访问容器服务,端口转发在这种情况下不起作用(服务将在不同的地方有不同的地址)。

也libvmnet不太好,但这是一个解决方案,sudo比什么都可以接受!!!

点击设备解决方案无需no-sudo权限。 至少,适用于mac的docker应该提供一些破解方法,以使开发人员得以发展。 例如,hyperkit start命令参数可以由用户自定义。

目前,适用于mac的docker对人们几乎没有用。

狗屎!

是否可以解决或何时解决此问题?

@justincormack :另外,此网络设置将需要root用户访问权限,而我们正试图完全避免在Mac的Docker中使用(我们目前正在尝试删除非常小的root帮助程序)。

为什么? 在Linux上,没有root特权就无法运行docker,并且一切都很好,在OSX上您要避免这种情况。 背后的原因是什么? 因此,从现在开始,OSX的docker应该像facebook app一样,核心功能不起作用并不重要,但是它不需要root特权吗?

IMO如果具有root特权有助于解决该问题,请修复该问题,同时尝试在没有root的情况下实现它。 我们目前没有过去使用的核心功能,我们基于该功能计划了整个流程,现在我们需要解决许多问题。

可以接受的折衷方案是将其视为高级功能。 启用高级功能后,它们是否需要其他特权?

我希望返回此功能的原因是将内容保留在标准端口上。 我们对所有服务都有一个标准的命名约定。 我甚至为dev创建了DNS记录,这些记录可能指向其Mac上的静态IP。 每个容器都有自己的IP,因此无论您使用哪个项目,它始终是端口3306。 每个项目都是真正分开的,就像在Qa中一直到进行Prd一样。

现在,当开发人员想要在其本地计算机上连接MySQL时,他们必须查看图表以查看项目具有的唯一端口。 项目A是3307,项目B是3308,那么项目Q又是什么? 随机端口也是草率的,因为它不允许您保存连接设置等。 您仍然需要一直查找它。

虽然这似乎是一个小问题。 经常在项目之间切换很烦人,采用这种标准化,它消除了很多额外的步骤。 您想从事其他项目吗? Git克隆并运行make。 从那里开始设置一切。 多个容器,凭据,配置等。单个命令开发设置。

+1,迫切需要:-/

我只是了解了https://docs.docker.com/docker-for-mac/networking/上的文档,所以我了解所涉及的挑战。

不幸的是,这对于在我们的本地开发环境中使用docker native是一个严重的障碍。 我曾希望从Virtualbox / Vagrant迁移。

我们的问题是我们使用Consul进行服务发现。 对于本地开发,我们希望从docker-compose和直接在Mac上的开发人员的IDE中运行多种服务。 由于在容器中运行的服务使用其docker ip:port向领事注册,因此在docker外部运行的服务无法集成。

当然,在多主机群集中这也是一个问题,但是可以通过覆盖网络解决(或者在我们的示例中,这是一个令人讨厌的自省自省入口点脚本,可以找出主机ip:port映射)。

看来自省API终于在使用中,以帮助解决此类问题(https://github.com/docker/docker/issues/7472)。 希望自省API也可以在Mac / Windows的Docker中使用)。

嗨,我觉得有一些东西是值得分享与此相关的主题,我们很谈得来到host机使用的容器内default IP通过创建Docker for Mac/Windows

IP为192.168.65.1

您可以按照以下步骤进行测试:

rogaha@MacBook-Pro:~/development/rogaha$ docker run --name docker-nginx -p 80:80 -d nginx                                
4bc4818c49cffd7b4186294c71e6d4608c0482fd74521b3e9d03a14d499b3e6b
rogaha@MacBook-Pro:~/development/rogaha$

rogaha@MacBook-Pro:~/development/rogaha$ docker run -it --rm tutum/curl curl 192.168.65.1                                                                                   5:52:22
<!DOCTYPE html>
<html>
<head>
<title>Welcome to nginx!</title>
<style>
    body {
        width: 35em;
        margin: 0 auto;
        font-family: Tahoma, Verdana, Arial, sans-serif;
    }
</style>
</head>
<body>
<h1>Welcome to nginx!</h1>
<p>If you see this page, the nginx web server is successfully installed and
working. Further configuration is required.</p>

<p>For online documentation and support please refer to
<a href="http://nginx.org/">nginx.org</a>.<br/>
Commercial support is available at
<a href="http://nginx.com/">nginx.com</a>.</p>

<p><em>Thank you for using nginx.</em></p>
</body>
</html>
rogaha@MacBook-Pro:~/development/rogaha$

希望对您有所帮助!

@rogaha这是有趣的信息。 那是记录在某处吗? 您如何得知的?

我在Mac上本地确认,它确实确实可以通过192.168.65.1到达主机(不仅仅是另一个Docker容器)。

我不确定。 @thaJeztah @justincormack你碰巧知道吗?

是的,已添加该路由以支持联系主机。

在进行一些标准命名之前,通常我们不建议使用
它显然无法在生产中使用,但可以通过
参数。

2017年2月27日08:49,“ Roberto Gandolfo Hashioka”通知@ github.com
写道:

我不确定。 @thaJeztah https://github.com/thaJeztah @justincormack
https://github.com/justincormack您碰巧知道吗?

-
您收到此邮件是因为有人提到您。
直接回复此电子邮件,在GitHub上查看
https://github.com/docker/docker/issues/22753#issuecomment-282777837
或使线程静音
https://github.com/notifications/unsubscribe-auth/AAdcPJ3h5OrhxpgWao8by-qu-UmsuWIOks5rgv62gaJpZM4Ie9PB

@rogaha 192.168.65.1不能正常工作。 您如何找到该IP的?

我只想在此线程中与其他所有人一起添加一个+ 1 /订阅,并向功能请求添加另一个声音,以便能够通过唯一/自定义IP地址上的网桥接口轻松访问docker容器。

我将头撞到墙上至少4个小时,试图弄清为什么我无法得到任何有记录的示例,直到我以某种方式发现了这个问题,并完美地描述了问题。

目前, @ justincormack (https://github.com/moby/moby/issues/22753#issuecomment-246054946)提到的解决方法似乎工作得很好。 我正在使用以下说明向Drupal VM添加实验性Docker支持:

  1. 使用sudo /etc/hosts将主机添加到/etc/hosts sudo /etc/hosts (例如192.168.1.100 mysite.dev
  2. 在回送接口上创建别名: sudo sudo ifconfig lo0 alias 192.168.1.100/24
  3. 用以下伪组合创建一个容器:

      version: "3"
    
      services:
        app:
          image: image-name
          ports:
            - 192.168.1.100:80:80
            - 192.168.1.100:443:443
          [...]
    

这似乎对我来说是完美的,尽管目前需要几个手动步骤(如果在Docker之上使用其他工具,则可以避免这些步骤……我不想强迫我的用户这样做),但它允许我几乎可以在Mac上达到Docker的必杀技。

因此,感谢您的解决方法,我希望您能找到一种使网桥网络尽快工作的方法(或放弃macOS <10.12😏)

@rogaha非常感谢您,192.168.65.1解决了我的问题。 我希望除非他们找到更清洁的解决方案,否则将来不会改变。 从适用于Mac的Docker 17.0.3.1开始,这使我的容器可以与在我的机器的localhost上运行的MySQL服务器进行通信。

@TheAntonioReyes很高兴它为您服务。 感谢您的反馈!

你好

我在这里阅读文档: https: //docs.docker.com/docker-for-mac/networking/#use -cases-and-workarounds,我正在尝试使用_提到的特殊的仅限Mac的DNS名称_ : docker.for.mac.localhost

如果我在docker容器内的终端上执行ping操作,它将解析为192.168.65.1,并且对在我的mac上运行的应用程序进行卷曲会检索到预期的结果。

我正在使用此图像: https : http://docker.for.mac.localhost :80,连接被拒绝。 但是,执行http://192.168.65.1:80可以。

我想念什么吗? 我想开始使用docker.for.mac.localhost

我正在使用:版本17.06.0-ce-mac18(18433)

编辑:似乎这仅发生在Chrome上,此问题对此进行了解释。 https://github.com/docker/for-mac/issues/1837

我认为使用docker.for.mac.localhost是一个糟糕的决定。 容器的全部重点是它们是可移植的,并且不应该依赖于它们所驻留的主机类型。 如果我的团队是一半的Windows用户和一半的Mac,那么我们必须对容器内部的代码进行不同的配置。

我很高兴有一种主机名方法,我只是认为决定该方法的会议应该再持续5分钟。

docker.for.mac.localhost工作。 搞笑 https://docs.docker.com/docker-for-mac/networking/#use -cases-and-workarounds

我通过回到Mac的docker-machine解决了这个问题。 docker机器VM是Linux发行版,这意味着它创建了docker0接口,该接口可以访问docker容器的私有网络范围。 然后,在我的主机Mac机器上,我为容器的172.18.xx地址范围创建了一条路由,该路由指向docker机器实例的IP地址(在我的情况下为192.168.99.100)。

这允许发往私有容器网络的数据包由我的Mac OS转发到docker machine的linux VM的IP地址,后者知道如何到达私有容器并将数据包直接转发给它们。

为私有容器网络创建到docker机器vm的路由

sudo route -n add -net 172.18.0.0/16 192.168.99.100

您可以使用docker network inspectdocker inspect <container_name>获得容器网络的地址。

您可以通过运行以下命令在docker for mac中找到主机的ip:

docker run busybox ping -c 1 docker.for.mac.localhost | awk 'FNR==2 {print $4}' | sed s'/.$//'

运行此命令

docker run -i -d --expose=80 <container_name> bash

然后从获取IP地址

docker ps

如果它显示为0.0.0.0,则在端口暴露或在其中写入任何其他IP地址后,它将正常工作。

解决方案实际上相对简单。 IDK为什么Docker无法修复它。

请参阅https://github.com/AlmirKadric-Published/docker-tuntap-osx,了解可以消除hyperkit二进制文件的变通方法。

#155(和#171,#515,#3484)的部分重复。

我要关门了这是设计使然,无论如何都与此仓库无关。

以下对我而言非常有用。 没有中间容器,没有DNS解决方法。

https://github.com/AlmirKadric-Published/docker-tuntap-osx#how -it-works:

完成后,IP地址10.0.75.2可以用作网络路由网关,以访问主机虚拟机内的任何容器:
route add -net <IP RANGE> -netmask <IP MASK> 10.0.75.2

谢谢@pauldraper (!)。

@pauldraper于2019年7月14日发表评论

解决方案实际上相对简单。 IDK为什么Docker无法修复它。

请参阅https://github.com/AlmirKadric-Published/docker-tuntap-osx,了解可以消除hyperkit二进制文件的变通方法。

我的macOS版本:

$ sw_vers
ProductName:    Mac OS X
ProductVersion: 10.14.6
BuildVersion:   18G3020
$
此页面是否有帮助?
1 / 5 - 1 等级