Docker OSX:从容器连接到主机端口

我的问题

我正试图在泊坞窗容器上安装Flask应用程序。 该应用程序需要一些包通过点安装。

我正在使用一个本地(主机,而不是容器)点对点9000端口回购。因此,我尝试了以下几点:

pip install -i 127.0.0.1:9000/simple my_custom_package 

这个调用在主机上工作,但是当我在容器上运行时,我得到:

 Collecting my_custom_package Url '127.0.0.1:9000/simple/my_custom_package/' is ignored. It is either a non-existing path or lacks a specific scheme. 

我做了一些curl尝试,但似乎容器不能简单地访问主机上的一个端口。

设置

  • OSX 10.11.6
  • Docker版本1.12.1,版本6f9534c
  • tiangolo / uwsgi-nginx-flask图像

我试过了什么

  • 我已阅读如何从Docker容器访问主机端口 ,但该解决scheme不适用于OSX。
  • 从容器内访问主机不是vm ,但是数据已经过时,solutino不能在我的系统上运行。

如何从OSX上的Docker容器访问主机端口?

您可以将IP别名添加到您的主机回送接口,以用作通常在本地主机上运行的任何内容的服务地址。 select一个你不太可能在别处使用的私人IP地址,类似10.8.8.8就可以。

组态

添加别名

 $ sudo ifconfig lo0 alias 10.8.8.8 netmask 255.255.255.255 up 

检查别名是否存在

 $ ifconfig lo0 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 inet 10.8.8.8 netmask 0xffffffff nd6 options=1<PERFORMNUD> 

使用别名地址。

 $ curl -I http://10.8.8.8:4873 HTTP/1.1 200 OK X-Powered-By: Unicorns/1.4.0 X-Frame-Options: deny Content-Type: text/html; charset=utf-8 ETag: "03158871ca3bbf51e45a2c133c2176b9" Content-Length: 8524 Vary: Accept-Encoding Date: Tue, 04 Oct 2016 00:44:34 GMT Connection: keep-alive 

如果您的服务被configuration为专门监听本地主机而不是通配符/所有地址,则可能需要重新configuration它以在10.8.8.8上进行监听。

启动

要永久添加别名,请使用以下内容创build文件/Library/LaunchDaemons/com.yourname.ifconfig.10.8.8.8.plist

 <plist version="1.0"> <dict> <key>Label</key> <string>ifconfig-10.8.8.8</string> <key>ProgramArguments</key> <array> <string>/sbin/ifconfig</string> <string>lo0</string> <string>alias</string> <string>10.8.8.8</string> <string>netmask</string> <string>255.255.255.255</string> <string>up</string> </array> <key>RunAtLoad</key> <true/> </dict> </plist> 

这也可以作为一个通用的networking解决scheme。 私人服务地址不需要托pipe在本地主机上,它可以在本地networking的任何地方。 如果你所有的私人networking都有可用的服务地址,你可以在任何地方使用这个configuration,而不是为你的本地开发提供一个特殊的情况

Interesting Posts