gpt4 book ai didi

c# - Docker 容器无法启动

转载 作者:行者123 更新时间:2023-11-29 12:23:26 26 4
gpt4 key购买 nike

创建了一个连接到 PostgreSQL 的简单应用程序,但是当我使用 Docker 将它容器化时,我似乎无法启动它,并且在我运行容器时没有显示任何端口。似乎是什么问题?

该应用程序可以在没有 Docker 的情况下运行,但是当我将其容器化时,问题就出现了。

docker build 成功,当我使用 docker run

它给了我一个容器,但是当我使用 docker ps -a 检查它时,没有显示任何端口

这是我在 docker 终端上做的

这是我连接到 PostgreSQL 数据库时的代码

class Program
{
static void Main(string[] args)
{
using (var connection = new NpgsqlConnection("Host=localhost;Username=postgres;Password=password;Database=user"))
{
connection.Open();
connection.Execute("Insert into customer (name) values ('Mikolasola');");
var value = connection.Query<string>("Select name from customer;");
Console.WriteLine(value.First());
}

Console.Read();
}
}

这是我的 docker 文件

FROM mcr.microsoft.com/dotnet/core/sdk:2.2 AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

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

FROM mcr.microsoft.com/dotnet/core/aspnet:2.2
WORKDIR /app
COPY --from=build-env /app/out .
ENTRYPOINT ["dotnet", "webapplication1.dll"]

编辑:将我的 Docker 文件更改为此,现在我可以通过某种方式获取端口

FROM microsoft/dotnet:2-sdk AS build-env
WORKDIR /app

COPY *.csproj ./
RUN dotnet restore

COPY . ./
RUN dotnet publish -c Release -r linux-x64 -o out

FROM microsoft/dotnet:2-runtime-deps
WORKDIR /app
COPY --from=build-env /app/out ./
ENTRYPOINT ["./webapplication1"]

但是我无法运行它。这是截图

enter image description here

任何帮助将不胜感激。谢谢!PS:我是新手

最佳答案

  1. 如果您使用 Docker for Mac(或 Docker for Windows),要访问主机上的任何内容,您需要使用 host.docker.internal。更多关于 here .
  2. 从配置和环境变量中读取连接字符串。这将允许您在运行容器时覆盖它。

PS: im a newbie

给你的专业提示:p

你可能不想在你正在工作的容器上使用 -d,所以你会看到它的日志就在那里。如果您不使用它,您会看到进程退出并且不会想知道为什么那里没有显示端口 :)


更新:

  1. 使用原始问题中的 Dockerfile(编辑前)。
  2. 我建议你不使用 -d 来运行它:
    docker run -p 8080:80 --name test webapp1
    这将向您显示 aspnet 应用程序崩溃。你会看到发生了什么。在这种情况下,因为我知道发生了什么,所以我可以提供帮助,但通常您想知道发生了什么。您可以通过不在分离状态下运行它来处理像这样的小事情,并在有很多要解析的时候使用 docker logs 来做到这一点。不管怎样……
  3. ...您希望容器访问主机上的数据库,而不是本地主机上的数据库。您可以通过使用 host.docker.internal 作为主机来做到这一点。例如:
    Host=host.docker.internal;Username=postgres;Password=password;Database=user
    这仅在您使用适用于 Windows 的 Docker 或适用于 Mac 的 Docker 时有效。不适用于 Docker 工具箱或 linux AFAIK。
  4. 现在您需要找出一种方法,让您的应用程序在 docker 中运行时使用 host.docker.internal,否则使用 localhost。我的建议是从配置中读取它。

关于c# - Docker 容器无法启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56496639/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com