Docker OSX: 如何在容器内连接主机端口?

3

我的问题

我正在尝试在Docker容器中安装Flask应用程序。该应用程序需要通过pip安装一些软件包。

我正在使用本地(主机而非容器)的端口9000上的pip仓库。因此,我尝试了以下操作:

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 上如何从 Docker 容器访问主机端口?


你是如何运行Docker的?使用Docker-machine?Docker4Mac? - enderland
1个回答

8

你可以向主机的回环接口添加IP别名,用作本地主机上运行的服务地址。选择一个私有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

如果您的服务配置为仅监听localhost而不是通配符/所有地址,则可能需要重新配置它以侦听10.8.8.8

启动

要永久添加别名,请创建一个文件/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> 

这也可以作为一般的网络解决方案。私有服务地址不需要托管在本地主机上,它可以存在于你本地网络的任何地方。如果所有的私有网络都有该服务地址可用,那么你可以在任何地方使用该配置,而不必为本地开发特殊设置。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接