【发布时间】:2019-03-10 04:11:54
【问题描述】:
我们有一个在 Ubuntu 18.04 下运行的 ASP.Net 应用程序(安装了 aspnetcore 2.2,只有运行时)。我们使用 kestrel 服务为应用提供服务,使用 nginx 作为反向代理。安装在虚拟机/云实例中时,一切运行良好。 现在,我正在寻找容器化我们的应用程序(只是测试水域)。因此,我使用以下 dockerfile 构建了一个图像:
FROM ubuntu:18.04
RUN apt-get update && \
apt-get -y install software-properties-common wget && \
wget -q -O /opt/packages-microsoft-prod.deb https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb && \
dpkg -i /opt/packages-microsoft-prod.deb && \
add-apt-repository universe && \
apt-get update && \
apt-get install -y apt-transport-https aspnetcore-runtime-2.2 nginx
COPY default /etc/nginx/sites-available/default
COPY appfolder /opt/
ENTRYPOINT ["dotnet", "/opt/appfolder/app.dll"]
EXPOSE 80:80
但是,当我尝试运行映像时,出现以下错误:
您的意思是运行 dotnet SDK 命令吗?请安装 dotnet SDK 来自:https://go.microsoft.com/fwlink/?LinkID=798306&clcid=0x409
知道可能出了什么问题吗?我的假设是(对 Docker 世界很陌生): 使用 Ubuntu 18.04 作为基础镜像并在顶部安装 Dotnet 和 Nginx,然后复制 nginx 默认站点并运行应用程序(使用 dotnet)。显然,我错过了一些东西。
【问题讨论】:
-
调试映像的一种方法是使用
... --entrypoint=/bin/bash [image]运行它。然后,从 shell 中检查您的应用程序文件是否在您期望的位置,然后尝试运行 DLL。 -
谢谢@DazWilkin,这是个好主意。今天会试一试。
-
刚试了一下,Docker 运行它并立即退出。没有错误,什么都没有。甚至返回码为 0 表示没有错误。
-
嗯,这是个问题! :-) 您可以尝试增加详细程度:
--verbosity和detailed 或diagnostic。如果您使用 VM 重现DOCKERFILE命令,它是否有效?我很好奇的一件事是,您说您使用 Nginx 作为代理,但您仅使用 DLL 运行dotnet进程。那里有些不对劲。我很抱歉我的 .NET foo 是有限的。 -
将尝试冗长。我现在确实最终更改了 Dockerfile。我创建了一个脚本(验证它在我的 vm 中工作),而不是所有这些运行命令,复制并运行它。这似乎好一点。此外,对于 docker run 命令,看起来添加 -t (分配 pesudo 终端)和 -i (交互式 shell)似乎有所作为,并为我提供了可以使用的 shell。我错过了首先添加服务 nginx start ,但后来添加了它(尽管这不是问题)。 :-)
标签: docker asp.net-core dockerfile ubuntu-18.04