如何使用docker-compose设置主机名?

我已经用docker-compose设置了一些docker-container。

当我通过docker-compose up我可以通过他们暴露的端口访问他们,例如localhost:9080localhost:9180

我真的想通过主机名来访问它们, localhost:9180应该可以通过api.local访问localhost:9180主机,通过webservice.local访问localhost:9080

我怎样才能做到这一点? 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文件只parsing主机名。 因此它只能parsinglocalhost127.0.0.1

如果你像api.local 127.0.0.1:9180添加一行,它不会工作。

唯一能做的就是在主机上设置一个反向代理(如nginx)来监听api.local ,并将请求转发到localhost:9180

你应该检查一下该项目。 通过添加一个VIRTUAL_HOST环境variables,容器可以通过域名访问。 例如,如果您设置VIRTUAL_HOST=web.docker ,则可以通过http://web.docker访问容器。

项目主页有更多的信息。 这是一个年轻的项目,但正在积极发展。 Docker for Mac和dlite已经出现/成熟,现在也计划支持macOS。