Docker compose容器:如何别名端口?
我在Docker中使用了Adminer(来自标准)和Docker compose容器:如何别名端口?,docker,docker-compose,Docker,Docker Compose,我在Docker中使用了Adminer(来自标准)和Docker compose: docker compose.yml: version: '2' services: adminer: image: adminer restart: always ports: - '8080:8080' /etc/hosts(在主系统中): 当我在浏览器中输入adminer.ll:8080时,我得到了adminer 然后我决定,我只希望这个地址是adminer.ll,
Docker compose
:
docker compose.yml
:
version: '2'
services:
adminer:
image: adminer
restart: always
ports:
- '8080:8080'
/etc/hosts
(在主系统中):
当我在浏览器中输入adminer.ll:8080时,我得到了adminer
然后我决定,我只希望这个地址是adminer.ll
,没有端口8080
(这意味着将公开端口从8080
更改为80
)
因此,我更改了端口
参数:
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
,但事实并非如此
谢谢。@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
property)发生在“外部”网络上,因此仅当我使用127.0.0.1到达容器时才使用它。如果我使用容器的直接IP,它将不被应用
注2:我还通过docker容器的“直接IP”(类似172.19.0.x)将其他本地域路由到一些docker容器。它工作正常,因为它们隐式使用标准端口80。如果我尝试将它们的路由更改为127.0.0.1,我会看到Adminer。我想这就是@碱性在评论中指出的
谢谢大家。为什么主机文件中有172.19.0.6 adminer.ll
,而不是127.0.0.1 adminer.ll
?您不是在本地运行docker compose吗?您还可以尝试端口:-127.0.0.1:80:80
而不是在compose yaml中仅运行端口:-“8080:8080”
?确保主机上没有其他服务正在侦听端口80。执行一个sudo netstat-tpln
来查看什么在听什么。@kfedorov91我正在本地运行它。我有它,因为我想,这是容器的IP地址,它收到的。当我运行docker inspect docker\u adminer\u 1 | grep IPAddress\“
时,我看到IPAddress:“172.19.0.2”
,所以当您删除并重新创建容器时,我将其复制到etc/hosts
,它的IP地址发生了变化。您可能永远都不会查找docker的内部IP地址。
Name Command State Ports
-----------------------------------------------------------------------------------------
docker_adminer_1 entrypoint.sh docker-php-e ... Up 0.0.0.0:80->8080/tcp