我试图测试ASP。 VSTS中的NET Core 2 dockerized应用程序。它通过docker-compose设置在docker容器内。测试通过存储在config中的地址发出请求(或者从环境变量中获取,如果已设置)。
现在,构建设置如下:
首先,我发现我无法在VSTS中使用http://localhost:port。它在我的本地计算机上运行正常,但它在服务器上不起作用。
我发现这个article指出需要使用容器的真实IP来访问它。我已经尝试过引用的question中描述的两种方法,但都没有。
select (case when ((select count(*) from tblProduct a where a.Male=1 and a.Brand_ID=b.Brand_ID) > 0) then 1 else 0 end) Male,
(case when ((select count(*) from tblProduct a where a.Female=1 and a.Brand_ID=b.Brand_ID) > 0) then 1 else 0 end) Female
,b.Brand_Name
from tblProduct as a inner join
tblBrand as b on b.Brand_ID = a.Brand_ID
group by b.Brand_Name,b.Brand_ID
时,我得到docker inspect -f '{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' container_name_or_id
(问题在于命令本身)Template parsing error: template: :1:24: executing "" at <.NetworkSettings.Net...>: map has no entry for key "NetworkSettings"
时,我实际上获得了IP并且可以将其传递给测试,但随后发生了一些奇怪的事情。也就是说,他们开始超时。我尝试在本地复制它,它确实如此。我对此IP的每个请求都超时(在浏览器中轻松检查)。我需要使用什么地址来访问VSTS中的容器,为什么我不能使用localhost?
答案 0 :(得分:1)
我遇到了类似的问题,即在容器中运行Azure存储服务进行单元测试(Gradle&amp; Kotlin项目)。本地一切正常,可以使用localhost:10000连接到容器(端口在运行命令中发布到主机)。但这不适用于VSTS构建管道,也不适用于尝试连接容器的IP。
我找到了一个至少在这种情况下有效的解决方案:我创建了一个自定义容器网络,并将我的Azure存储容器和VSTS代理容器连接到该网络。之后,可以使用容器名称和内部端口号从测试连接到我的自定义容器,例如我的存储容器:10000
所以我创建了一个脚本来创建容器网络,在该网络中启动我的容器,然后通过从进程列表中点击容器ID来连接VSTS代理。它的'像这样:
docker network create my-custom-network
docker run --net=my-custom-network -d --name azure-storage-container -t -p 10000:10000 -v ${SCRIPT_DIR}/azurite:/opt/azurite/folder arafato/azurite
CONTAINER_ID=`docker ps -a | awk '{ print $1,$2 }' | grep microsoft/vsts-agent | awk '{print $1 }'`
docker network connect my-custom-network ${CONTAINER_ID}
之后,我的测试可以使用http://azure-storage-container:10000连接到Azure存储容器,没有任何问题。