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

How to setup hostnames using docker-compose?

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

当我通过 docker-compose up 启动它们时,我可以通过它们公开的端口访问它们,例如localhost:9080localhost: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.