iamluc/docker-hostmanager

更新 /etc/hosts 以访问运行中的容器

v0.4.0 2016-07-30 08:32 UTC

README

关于

自动更新 /etc/hosts 以访问运行中的容器。灵感来源于 vagrant-hostmanager

项目主页: https://github.com/iamluc/docker-hostmanager

用法

Linux

最简单的方式是使用 docker 镜像

$ docker run -d --name docker-hostmanager --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /etc/hosts:/hosts iamluc/docker-hostmanager

注意:使用 --restart=always 选项会使容器与计算机一起自动启动(推荐)。

Mac OS

在此处下载 PHAR 可执行文件: https://github.com/iamluc/docker-hostmanager/releases

然后运行它

$ sudo php docker-hostmanager.phar synchronize-hosts

注意:我们以 root 用户运行命令,因为我们需要写入文件 /etc/hosts 的权限。如果您不想以 root 用户运行命令,请为您的用户授予正确的权限。

运行命令之前,别忘了导出您的 docker 环境变量。例如。

$ eval $(docker-machine env mybox)

此外,您应该在 VM 内部容器中添加路由。

$ sudo route -n add 172.0.0.0/8 $(docker-machine ip $(docker-machine active))

Windows

如果主机不使用 Docker ToolBox 或不是 Windows 10 PRO,则需要将 /c/Windows 文件夹挂载到 VirtualBox 上。

$ docker run -d --name docker-hostmanager --restart=always -v /var/run/docker.sock:/var/run/docker.sock -v /c/Windows/System32/drivers/etc/hosts:/hosts iamluc/docker-hostmanager

运行容器后,我们需要添加路由以访问容器子网。

$ route /P add 172.17.0.0/12 192.168.99.100

配置

使用网络

当容器属于至少一个网络时(通常在版本 >= 2 的 docker-compose.yml 文件中使用时),用于访问容器的名称为 CONTAINER_NAME.CONTAINER_NETWORK。它也适用于网络定义的别名。

由于容器可以同时属于多个网络,并且通过别名,您可以定义如何访问您的容器。

示例 1(默认网络)

version: '2'

services:
    web:
        image: iamluc/symfony
        volumes:
            - .:/var/www/html

容器 web 将可以通过 web.myapp_default 访问(如果 docker-compose 项目的名称是 myapp

示例 2(自定义网络名称和别名)

version: '3.5'

networks:
    default:
        name: myapp

services:
    web:
        image: iamluc/symfony
        volumes:
            - .:/var/www/html

    mysql:
        image: mysql
        networks:
            default:
                aliases:
                    - bdd

容器 web 将可以通过 web.myapp 访问。容器 mysql 可以通过 mysql.myappbdd.myapp 访问

不使用网络

当容器没有定义网络(只有默认的 "bridge" 网络)时,可以通过容器名称及其定义的 TLD(默认为 .docker)访问。当您使用 docker 命令运行单个容器或使用版本 1 的 docker-compose.yml 文件时,情况就是这样。

DOMAIN_NAME 环境变量允许您为容器定义额外的主机。例如。

$ docker run -d -e DOMAIN_NAME=test.com,www.test.com my_image

测试

要运行测试,请执行以下命令: vendor/bin/phpunit

许可协议

MIT