如何在Windows Container中获取Docker IP?

时间:2017-12-09 20:40:30

标签: docker docker-compose dockerfile asp.net-core-1.1 docker-windows

我无法从浏览器中获取容器IP地址。

代码段

PS H:\DevAreaLocal\COMPANY - RAD PROJECTS\DockerApp\WebDockerCoreApp> docker-compose build

Building webdockercoreapp
Step 1/5 : FROM microsoft/aspnetcore:1.1
 ---> 4fe9b4d0d093
Step 2/5 : WORKDIR /WebDockerCoreApp
 ---> Using cache
 ---> b1536c639a21
Step 3/5 : COPY . ./
 ---> Using cache
 ---> 631ca2773407
Step 4/5 : EXPOSE 80
 ---> Using cache
 ---> 94a50bb10fbe
Step 5/5 : ENTRYPOINT dotnet WebDockerCoreApp
 ---> Using cache
 ---> 7003460ebe84
Successfully built 7003460ebe84
Successfully tagged webdockercoreapp:latest

PS H:\DevAreaLocal\COMPANY - RAD PROJECTS\DockerApp\WebDockerCoreApp> docker inspect --format="{{.Id}}" 7003460ebe84

获得Bellow ID

  

SHA256:7003460ebe84bdc3e8647d7f26f9038936f032de487e70fb4f1ca137f9dde737

如果我运行bellow命令

docker inspect -f "{{ .NetworkSettings.Networks.nat.IPAddress }}" 7003460ebe84

得到响应

模板解析错误:模板:: 1:19:在< .NetworkSettings.Net执行“”...>:地图没有关键字“NetworkSettings”的条目

Docker.Compose.yml文件设置

version: '2.1'

services:
  webdockercoreapp:
    image: webdockercoreapp
    build:
      context: ./WebDockerCoreApp
      dockerfile: Dockerfile
    ports:
      - "5000:80"

networks:
  default:
    external:
      name: nat

通过运行“docker network ls

得到了响亮的回应

NETWORK ID          NAME                       DRIVER              SCOPE
f04966f0394c        nat                        nat                 local
3bcb5f906e01        none                       null                local
680d4b4e1a0d        webdockercoreapp_default   nat                 local

当我运行“docker network inspect webdockercoreapp_default

得到以下回复

[
    {
        "Name": "webdockercoreapp_default",
        "Id": "680d4b4e1a0de228329986f217735e5eb35e9925fd04321569f9c9e78508ab88",
        "Created": "2017-12-09T22:59:55.1558081+05:30",
        "Scope": "local",
        "Driver": "nat",
        "EnableIPv6": false,
        "IPAM": {
            "Driver": "windows",
            "Options": null,
            "Config": [
                {
                    "Subnet": "0.0.0.0/0",
                    "Gateway": "0.0.0.0"
                }
            ]
        },
        "Internal": false,
        "Attachable": true,
        "Ingress": false,
        "ConfigFrom": {
            "Network": ""
        },
        "ConfigOnly": false,
        "Containers": {},
        "Options": {
            "com.docker.network.windowsshim.hnsid": "ad817a46-e7ff-4fc7-9bb9-d6cf17820b8a"
        },
        "Labels": {
            "com.docker.compose.network": "default",
            "com.docker.compose.project": "webdockercoreapp"
        }
    }
]

2 个答案:

答案 0 :(得分:0)

当您运行命令$(this).children(".comment").children(".options_bar").children(".reply").on("click",function () { $(this).parent().parent().parent().children(".reply_container").children(".reply_form").children(".reply_button").on("click",function (e) { e.preventDefault(); var $this = $(this); $.ajax({ context:$this, url:"/yyqGS/public/form/get_clicked_index.php", type:"POST", data:{index:'-1' ,index2:$cid}, success:function () { //alert("1"); //var $this = $(this); $this.parent().attr("action","/yyqGS/public/form/reply.php?c_id=" + $cid); $this.parent().submit(); $.ajax({ url:"/yyqGS/public/form/get_url.php", type:"GET", success:function (d1) { alert("1"); var $data = d1.split(","); location.href = "/yyqGS/public/form/reply_notification2.php?id="+$data[0]+"&country="+$data[1]+"&tid="+$data[2]+"&cid="+$data[3]+"&rid="+$data[4]+"&cuser="+$data[5]; }, fail:function () { alert("f"); } }) } }) }); }); 时 - 您当前正在针对图像ID 而不是容器ID 运行此操作。< / p>

图像是您构建的静态资产,以及运行哪些容器。因此,您需要做的是首先通过以下方式将图像联机:

docker inspect --format="{{.Id}}" 7003460ebe84

现在,您可以通过以下方式查看正在运行的容器

docker-compose up

找到你想要的容器;让我们说出docker ps

现在您将能够针对容器运行原始命令 - 而不是图像。

abcd1234

这将返回容器的完整SHA;因为你最初询问网络设置;你可以运行类似的东西:

docker inspect --format="{{.Id}}" abcd1234

如果您不确定您的网络名称是什么(看起来应该是docker inspect -f "{{ .NetworkSettings.Networks.your_network_here.IPAddress }}" abcd1234 ),只需执行完整nat并查看输出并根据需要调整过滤器。< / p>

答案 1 :(得分:0)

使用Docker文件更改命令可解决此问题。 Bellow是代码片段

  
      
  1. 由于我们必须构建我们的项目,我们创建的第一个容器是一个   临时容器,我们将用它做那个,然后   最后把它丢弃。

  2.   
  3. 接下来,我们将.csproj文件复制到我们的临时容器中   '/ app'目录。我们这样做是因为.csproj文件包含一个   我们项目需要的包参考列表。复制此文件后,   dotnet将从中读取然后出去获取所有内容   我们项目需要的依赖项和工具。

  4.   
  5. 一旦我们删除了所有这些依赖项,我们就会将其复制到   临时容器。然后我们告诉dotnet发布我们的应用程序   使用发布配置并指定输出路径。

  6.   
  7. 我们应该已经成功编译了我们的项目。现在我们需要建立   我们的最终容器。

  8.   
  9. 这个最终容器的基本图像类似但不同   上面的FROM命令 - 它没有能够的库   构建一个只运行的ASP.NET应用程序。

  10.   

脑震荡:

  

我们现在已成功执行所谓的多阶段构建。   我们使用临时容器来构建我们的图像然后移过来   将已发布的dll放入另一个容器中,以便最小化   最终结果的足迹。我们希望这个容器有   绝对最低要求运行的依赖项;如果我们一直跟着   使用我们的第一张图片,然后它将与其他图像一起打包   这些层(用于构建ASP.NET应用程序)并不重要   会增加我们的图像尺寸。

FROM microsoft/aspnetcore-build:1.1 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -o out

FROM microsoft/aspnetcore:1.1
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "CoreApiDockerSupport.dll"]

使用.dockerignore文件

bin\
obj\

注意:如果您使用内置docker支持(使用docker-compose.ymldocker-compose.ci.build.yml)文件从Visual Studio IDE创建Asp.Net核心项目,则上述设置将起作用或没有它。

Source 1 - building-sample-app

Source 2 - asp-net-core-on-linux with Docker