首页 > 解决方案 > Docker-compose 容器:如何别名端口?

问题描述

我在 Docker 中使用了 Adminer(来自标准图像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。

然后我决定,我希望这个地址只adminer.ll没有端口8080(这意味着将暴露的端口从 更改808080)。

所以我改变了ports参数:

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

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

端口由管理员映像中8080的指令公开。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,但事实并非如此。

谢谢。

标签: dockerdocker-compose

解决方案


@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 在评论中指出的。

感谢你们。


推荐阅读