Docker-compose容器:如何为端口添加别名?

时间:2018-07-22 01:10:09

标签: docker docker-compose

我在Docker中使用了Adminer(来自标准image)和docker-compose

docker-compose.yml

version: '2'
services:
  adminer:
    image: adminer
    restart: always
    ports:
      - '8080:8080'

/etc/hosts(在主系统中):

172.19.0.6  adminer.ll

工作正常,当我在浏览器中输入adminer.ll:8080时,我得到了管理员。

然后我决定,我希望该地址仅为adminer.ll,而没有端口8080(这意味着将公开的端口从8080更改为80)。

所以我更改了ports参数:

version: '2'
services:
  adminer:
    image: adminer
    restart: always
    ports:
      - '80:8080'

但是它不起作用。当我在浏览器中输入adminer.ll时,它无法连接。有趣的是,adminer.ll:8080仍在工作。

端口8080由Adminer映像的EXPOSE指令公开。但是,为什么我的ports参数不能将其转换为80?我想念什么吗?

docker-compose ps的输出:

          Name                         Command               State          Ports        
-----------------------------------------------------------------------------------------
docker_adminer_1            entrypoint.sh docker-php-e ...   Up      0.0.0.0:80->8080/tcp

看起来它正在侦听所有IP,并将端口80转换为端口8080,但事实并非如此。

谢谢。

1 个答案:

答案 0 :(得分:1)

@ kfedorov91的评论解决了这个问题:

  

为什么您的主机文件中包含172.19.0.6 adminer.ll,而不是127.0.0.1 adminer.ll?您不是在本地运行docker-compose吗?

我只插入了127.0.0.1 adminer.ll并删除了以前的IP地址,当我转到adminer.ll时,可以看到Adminer。谢谢。

注意:看来“翻译”端口(由于ports属性)发生在“外部”网络上,因此仅当我使用127.0.0.1到达容器时才使用它。如果我使用容器的直接IP,则不会应用。

注2:我还将通过其“直接IP”(例如172.19.0.x)将其他本地域路由到某些Docker容器。它可以正常工作,因为它们隐式使用标准端口80。如果我尝试将其路由更改为127.0.0.1,则会看到Adminer。我想这就是@Alkaline在评论中指出的内容。

谢谢你们。