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

2024-05-09

我的问题

我正在尝试在 docker 容器上安装 Flask 应用程序。该应用程序需要通过以下方式安装一些软件包pip https://pip.pypa.io/en/stable/.

我在端口 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,但容器似乎不能简单地访问主机上的端口。

Settings

  • 操作系统 10.11.6
  • Docker 版本 1.12.1,内部版本 6f9534c
  • tiangolo/uwsgi-nginx-flask https://hub.docker.com/r/tiangolo/uwsgi-nginx-flask/ image

我尝试过什么

  • 我读过了如何从docker容器访问主机端口 https://stackoverflow.com/questions/31324981/how-to-access-host-port-from-docker-container,但该解决方案不适用于 OSX。
  • 从容器内部访问主机而不是虚拟机 https://forums.docker.com/t/access-host-not-vm-from-inside-container/11747/3,但数据已过时,并且该解决方案在我的系统上不起作用。

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


您可以将 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

如果您的服务配置为专门侦听本地主机而不是通配符/所有地址,您可能需要重新配置它以侦听10.8.8.8反而。

Startup

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

这也可以作为通用网络解决方案。专用服务地址不需要托管在本地主机上,它可以位于本地网络上的任何位置。如果您的所有专用网络都有可用的服务地址,您可以在任何地方使用该配置,而不是为本地开发提供特殊情况。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Docker OSX:从容器连接到主机端口 的相关文章

随机推荐