我在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
,但事实并非如此。
谢谢。
答案 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在评论中指出的内容。
谢谢你们。