【问题标题】:Access docker bridge using docker exec使用 docker exec 访问 docker 桥
【发布时间】:2016-10-03 20:59:51
【问题描述】:

首先,我在 docker 中完全是 n00b,但我进入了一个实际在 docker 中运行的项目,所以我一直在阅读它。

我的问题是,我必须在移动设备 (iOS) 中检查我的开发环境。我试图通过我的 docker ip 访问,因为这基本上是我在我的计算机上所做的。经过几次失败的尝试后,我注意到我必须使用 docker 网桥 而不是 docker 主机(默认)访问。

我已经定义了我的 docker 网桥(我认为它是默认的),但是我不知道如何在这个网络上运行我的服务器,你们能帮帮我吗?

一些重要说明:

  • 我正在使用 MAC OS X El capitan (10.11.1)
  • 设备和 mac 在同一个 wi-fi 网络中,我可以使用 docker 外的常规 localhost 访问。
  • 我运行服务器的以下步骤是:

    1. cd gsat_grupo_5/docker && docker-compose -p gsat_grupo_5 up -d
    2. docker exec -it gsatgrupo5_web_1 bash
    3. python manage.py runserver 0.0.0.0:8000
  • 当我运行 docker ps 时,我的 输出 是:

我的码头桥输出:

    {
        "Name": "bridge",
        "Id": "1b3ddfda071096b16b92eb82590326fff211815e56344a5127cb0601ab4c1dc8",
        "Scope": "local",
        "Driver": "bridge",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "default",
            "Options": null,
            "Config": [
                {
                    "Subnet": "172.17.0.0/16",
                    "Gateway": "172.17.0.1"
                }
            ]
        },
        "Internal": false,
        "Containers": {
            "565caba7a4397a55471bc6025d38851b1e55ef1618ca7229fcb8f8dfcad68246": {
                "Name": "gsatgrupo5_mongo_1",
                "EndpointID": "471bcecbef0291d42dc2d7903f64cba6701f81e003165b6a7a17930a17164bd6",
                "MacAddress": "02:42:ac:11:00:05",
                "IPv4Address": "172.17.0.5/16",
                "IPv6Address": ""
            },
            "5e4ce98bb19313272aabd6f56e8253592518d6d5c371d270d2c6331003f6c541": {
                "Name": "gsatgrupo5_thumbor_1",
                "EndpointID": "67f37d27e86f4a53b05da95225084bf5146261304016809c99c7965fc2414068",
                "MacAddress": "02:42:ac:11:00:03",
                "IPv4Address": "172.17.0.3/16",
                "IPv6Address": ""
            },
            "a0b62a2da367e720d3a55deb7377e517015b06ebf09d153c6355b8ff30cc9977": {
                "Name": "gsatgrupo5_web_1",
                "EndpointID": "52687cc252ba36825d9e6d8316d878a9aa8b198ba2603b8f1f5d6ebcb1368dad",
                "MacAddress": "02:42:ac:11:00:06",
                "IPv4Address": "172.17.0.6/16",
                "IPv6Address": ""
            },
            "b3286bbbe9259648f15e363c8968b64473ec0a9dfe1b1a450571639b8fa0ef6f": {
                "Name": "gsatgrupo5_mysql_1",
                "EndpointID": "53290cb44cf5ed8322801d2dd0c529518f7d414b3c5d71cb6cca527767dd21bd",
                "MacAddress": "02:42:ac:11:00:04",
                "IPv4Address": "172.17.0.4/16",
                "IPv6Address": ""
            }
        },
        "Options": {
            "com.docker.network.bridge.default_bridge": "true",
            "com.docker.network.bridge.enable_icc": "true",
            "com.docker.network.bridge.enable_ip_masquerade": "true",
            "com.docker.network.bridge.host_binding_ipv4": "0.0.0.0",
            "com.docker.network.bridge.name": "docker0",
            "com.docker.network.driver.mtu": "1500"
        },
        "Labels": {}
    }
]

如果有其他智能方法可以在我正在收听的移动设备中访问我的环境。

【问题讨论】:

  • 你在使用 Docker for Mac 吗?
  • 是的,但我无法在我的设备中访问@Matt

标签: ios docker networking docker-compose


【解决方案1】:

我必须使用 docker 网桥而不是 docker 主机(默认)访问。

除非你有一个奇怪的协议,比如从服务器连接到设备,通常从你的设备访问<macip>:8000就足够了。您可以在任何其他计算机上测试该服务吗?

如果您确实需要直接访问容器网络,那么在使用 Mac 时会有点困难...

Docker for Mac doesn't support direct access to the Linux virtual machines bridge networks 运行容器的位置。

Docker Toolbox 使用 boot2docker vm 映像运行 VirtualBox VM。可以使用它,但将自定义网络配置应用到通过docker-machine 工具设置和运行的 VM 会有点困难。

Plain Virtualbox 可能是您最好的选择,运行您自己的安装了 Docker 的 VM。

在 Virtualbox 中的虚拟机中添加两个 bridged network interfaces。一个用于 VM,一个用于容器,因此它们都可以在您的主网络上使用。

第一个接口用于主机。它应该像往常一样从 DHCP 获取地址,然后 Docker 将在您的正常网络上可用。

第二个桥接接口can be attached to your docker bridge and then the containers on that bridge will be on your home network

在 docker 的 v1.10 之前的版本中,Pipework 可用于physically mapped an interface in to the container

有一些specific VirtualBox interface setup required for both methods 可以确保所有这些都有效。

流浪者

Vagrant 可能会使 VM 设置更容易且可重复。

$ mkdir dockervm
$ cd dockervm
$ vagrant init debian/jessie64

Vagrantfile网络配置:

config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"
config.vm.network "public_network", bridge: "en1: Wi-Fi (AirPort)"

config.vm.provider "virtualbox" do |v|
  v.customize ['modifyvm', :id, '--nictype1', 'Am79C973']
  v.customize ['modifyvm', :id, '--nicpromisc1', 'allow-all']
  v.customize ['modifyvm', :id, '--nictype2', 'Am79C973']
  v.customize ['modifyvm', :id, '--nicpromisc2', 'allow-all']
end

请注意,此虚拟机将有 3 个接口。第一个接口供 Vagrant 用作管理地址,应保持原样。

启动

$ vagrant up
$ vagrant ssh 

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-05
    • 2019-11-14
    • 2016-10-14
    相关资源
    最近更新 更多