首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头货柜港6002接驳被拒绝

问码头货柜港6002接驳被拒绝
EN

Stack Overflow用户
提问于 2019-04-16 01:00:23
回答 2查看 1.9K关注 0票数 1

操作系统:。OSType: linux。体系结构: x86_64

我有一个ASP.NET核心网络应用程序运行在一个码头容器。下面是我的Dockerfile。

代码语言:javascript
复制
FROM microsoft/dotnet:2.1-aspnetcore-runtime AS base
WORKDIR /app
EXPOSE 6002

FROM microsoft/dotnet:2.1-sdk AS build
WORKDIR /src
COPY ["AdvPersonApi.csproj", "AdvPersonApi/"]
RUN dotnet restore "AdvPersonApi/AdvPersonApi.csproj"
COPY . ./AdvPersonApi/
WORKDIR "/src/AdvPersonApi"
RUN dotnet build "AdvPersonApi.csproj" -c Release -o /app

FROM build AS publish
RUN dotnet publish "AdvPersonApi.csproj" -c Release -o /app

FROM base AS final
WORKDIR /app
COPY --from=publish /app .
EXPOSE 6002
ENTRYPOINT ["dotnet", "AdvPersonApi.dll"]

该应用程序构建成功。我还可以创建Docker映像,并运行它。我希望该应用程序可以在本地主机:6002访问。我使用以下命令创建容器:

代码语言:javascript
复制
docker run -p 6002:6002 --name advpersonapicontainerv2 advpersonapi:v2

我看到容器是创建并运行的。

以下是停靠者ps的结果:

代码语言:javascript
复制
CONTAINER ID        IMAGE               COMMAND                  CREATED              STATUS              PORTS                    NAMES
0484b184aeb8        advpersonapi:v2     "dotnet AdvPersonApi…"   About a minute ago   Up About a minute   0.0.0.0:6002->6002/tcp   advpersonapicontainerv2

问题是我无法访问容器端口6002的应用程序。以下命令拒绝连接:

代码语言:javascript
复制
    docker exec 0484b184aeb8 curl http://localhost:6002/api/person/time
     % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                     Dload  Upload   Total   Spent    Left  Speed
      0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
curl: (7) Failed to connect to localhost port 6002: Connection refused

但是,如果我尝试

码头主管0484b184aeb8卷曲/api/person/time

我得到了回应。我是码头新来的。如何正确地将主机端口6002映射到容器端口6002?

EN

回答 2

Stack Overflow用户

发布于 2019-04-18 19:38:21

我弄明白了到底是怎么回事。我不得不强迫Kestrel听6002端口,方法是在appsettings.json中添加下面的内容。

代码语言:javascript
复制
 "Kestrel": {
    "EndPoints": {
      "Http": {
        "Url": "http://+:6002"
      }
    }
  }

归功于@在上述评论中提供的提示

票数 0
EN

Stack Overflow用户

发布于 2019-04-18 19:52:27

容器内的应用程序正在监听80,因此在Dockerfile中公开端口80而不是6002。

代码语言:javascript
复制
EXPOSE 80

然后在运行容器时将主机端口6002映射到容器端口80:

代码语言:javascript
复制
docker run -p 6002:80 --name advpersonapicontainerv2 advpersonapi:v2

最好让容器化的应用程序监听标准端口,比如80或8000。您不希望更新Dockerfile以使其侦听其他端口。这是主机级运行时映射的工作。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55699141

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档