如何使用 docker-compose 设置主机名?
How to setup hostnames using docker-compose?
我已经用 docker-compose 设置了一些 docker-容器。
当我通过 docker-compose up
启动它们时,我可以通过它们公开的端口访问它们,例如localhost:9080
和 localhost:9180
.
我真的很想通过主机名访问它们,localhost:9180
应该可以通过 api.local
在我的本地主机上访问,localhost:9080
可以通过 webservice.local
[=21= 访问]
我怎样才能做到这一点?这是 docker-compose
可以做的事情还是我必须在本地主机上使用反向代理?
目前我的 docker-compose.yml
看起来像这样:
api:
build: .
ports:
- "9180:80"
- "9543:443"
external_links:
- mysql_mysql_1:mysql
links:
- booking-api
webservice:
ports:
- "9080:80"
- "9443:433"
image: registry.foo.bar:5000/webservice:latest
volumes:
- ~/.docker-history:/.bash_history
- ~/.docker-bashrc:/.bashrc
- ./:/var/www/virtual/webservice/current
不,你不能这样做。
/etc/hosts
文件仅解析主机名。因此它只能将 localhost
解析为 127.0.0.1
.
如果你添加一行
api.local 127.0.0.1:9180
没用。
你唯一能做的就是在你的主机上设置一个反向代理(比如 nginx)来监听 api.local
并将请求转发到 localhost:9180
。
您应该查看 dory 项目。通过添加 VIRTUAL_HOST
环境变量,可以通过域名访问容器。例如,如果设置 VIRTUAL_HOST=web.docker
,则可以到达 http://web.docker
处的容器。
项目主页有更多信息。这是一个年轻的项目,但正在积极开发中。现在还计划支持 macOS Docker for Mac 和 dlite emerged/matured.
我已经用 docker-compose 设置了一些 docker-容器。
当我通过 docker-compose up
启动它们时,我可以通过它们公开的端口访问它们,例如localhost:9080
和 localhost:9180
.
我真的很想通过主机名访问它们,localhost:9180
应该可以通过 api.local
在我的本地主机上访问,localhost:9080
可以通过 webservice.local
[=21= 访问]
我怎样才能做到这一点?这是 docker-compose
可以做的事情还是我必须在本地主机上使用反向代理?
目前我的 docker-compose.yml
看起来像这样:
api:
build: .
ports:
- "9180:80"
- "9543:443"
external_links:
- mysql_mysql_1:mysql
links:
- booking-api
webservice:
ports:
- "9080:80"
- "9443:433"
image: registry.foo.bar:5000/webservice:latest
volumes:
- ~/.docker-history:/.bash_history
- ~/.docker-bashrc:/.bashrc
- ./:/var/www/virtual/webservice/current
不,你不能这样做。
/etc/hosts
文件仅解析主机名。因此它只能将 localhost
解析为 127.0.0.1
.
如果你添加一行
api.local 127.0.0.1:9180
没用。
你唯一能做的就是在你的主机上设置一个反向代理(比如 nginx)来监听 api.local
并将请求转发到 localhost:9180
。
您应该查看 dory 项目。通过添加 VIRTUAL_HOST
环境变量,可以通过域名访问容器。例如,如果设置 VIRTUAL_HOST=web.docker
,则可以到达 http://web.docker
处的容器。
项目主页有更多信息。这是一个年轻的项目,但正在积极开发中。现在还计划支持 macOS Docker for Mac 和 dlite emerged/matured.