iamluc / docker-hostmanager
更新 /etc/hosts 以访问运行中的容器
Requires
- docker-php/docker-php: dev-compat-docker-1.12
- symfony/console: ^2.8|^3.0
Requires (Dev)
- phpunit/phpunit: ^5.1
This package is auto-updated.
Last update: 2024-09-19 19:14:13 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.myapp 或 bdd.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