使用docker exec访问docker bridge

时间:2016-10-03 20:59:51

标签: ios networking docker docker-compose access

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

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

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

一些重要的注意事项:

  • 我正在使用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我的输出时:

enter image description here

我的码头桥输出:

    {
        "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": {}
    }
]

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

1 个答案:

答案 0 :(得分:0)

  

我要使用docker网桥而不是docker host(默认)访问。

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

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

适用于Mac的Docker doesn't support direct access to the Linux virtual machines bridge networks您的容器在哪里运行。

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

普通 Virtualbox 可能是您安装Docker运行自己的VM的最佳选择。

在Virtualbox中向VM添加两个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

在v1.10之前版本的docker 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

请注意,此VM将具有3个接口。第一个接口是Vagrant用作管理地址,应保持原样。

启动

$ vagrant up
$ vagrant ssh