You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Azure Pipeline部署作业中容器端口映射失效求助

问题原因与解决方案

问题根源

当你将Pipeline改为使用container: builder配置后,所有步骤都在builder容器内部执行:

  • 你运行docker run -p 127.0.0.1:9000:9000时,是把test-server的9000端口映射到**宿主机(ubuntu-latest虚拟机)**的localhost:9000;
  • 但curl http://localhost:9000是在builder容器内部执行的,容器的localhost与宿主机的localhost属于不同网络空间,因此无法连接;
  • 而docker exec test-server curl ...是直接在test-server容器内部访问服务,所以能正常工作。

解决方案

方案1:通过宿主机别名访问

在builder容器中,可使用host.docker.internal直接访问宿主机(Azure Pipelines的ubuntu-latest环境默认支持该解析):

docker run -d --name test-server \
  -p 9000:9000/tcp \
  my.azurecr.io/test-server-ubuntu:latest

sleep 5
curl http://host.docker.internal:9000/

方案2:使用自定义Docker网络(推荐)

创建共享网络,让builder容器与test-server容器直接通过容器名通信,无需端口映射:

# 创建自定义网络
docker network create test-network

# 启动test-server到该网络
docker run -d --name test-server --network test-network \
  my.azurecr.io/test-server-ubuntu:latest

sleep 5
# Docker会自动解析容器名对应的IP
curl http://test-server:9000/

方案3:获取宿主机IP访问

如果host.docker.internal不可用,可通过命令获取宿主机IP:

docker run -d --name test-server \
  -p 0.0.0.0:9000:9000/tcp \
  my.azurecr.io/test-server-ubuntu:latest

sleep 5
# 在builder容器内获取宿主机默认网关IP(即宿主机IP)
HOST_IP=$(ip route | grep default | awk '{print $3}')
curl http://$HOST_IP:9000/

内容的提问来源于stack exchange,提问作者Boris L

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 04:54:54