我已经在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。然后我决定,我希望这个地址只是
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,并将port
80
转换为port 8080
,但事实并非如此。谢谢。
最佳答案
@ kfedorov91的评论解决了这个问题:
我只插入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在评论中指出的内容。
感谢你们。