Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker compose容器:如何别名端口?_Docker_Docker Compose - Fatal编程技术网

Docker compose容器:如何别名端口?

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中使用了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
,没有端口
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