创建了一个连接到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"]
但是我不能运行它。这是屏幕截图
任何帮助将不胜感激。谢谢! PS:我是新手
答案 0 :(得分:0)
host.docker.internal
。有关here的更多信息。PS:我是新手
专业提示:p
您可能不想在正在使用的容器上使用-d
,因此您会在此处看到日志。如果您不使用它,您将看到进程退出,并且不知道为什么那里没有显示端口:)
更新:
-d
的情况下运行它:
docker run -p 8080:80 --name test webapp1
这将向您显示aspnet应用程序崩溃。您会看到发生了什么事。在这种情况下,由于我知道发生了什么事,我可以提供帮助,但总的来说,您想知道发生了什么事。您可以通过以下方式来做到这一点:不对诸如此类的小事情在分离状态下运行它,并在需要解析的地方使用docker logs
。反正... host.docker.internal
作为主机来执行此操作。例如:
Host=host.docker.internal;Username=postgres;Password=password;Database=user
仅当您使用Windows的Docker或Mac的Docker时,这才有效。在Docker Toolbox或Linux AFAIK上不起作用。host.docker.internal
的方式,否则要使用localhost
。我的建议是从config读取它。