Tengo un proyecto ASP.Net Framework 4.8. Quiero crear un archivo Docker basado en Linux para este proyecto, pero no puedo encontrar una imagen basada en Linux para usar como imagen base en mi archivo Docker para .NET Framework. ¿Cómo puedo crear un archivo Docker para esto?
.NET Framework no es multiplataforma. Tampoco lo es ASP.NET en sí mismo. No funcionan en Linux. Por lo tanto, no hay imágenes de contenedores basadas en Linux que le permitan ejecutar .NET Framework o ASP.NET Framework.
Y no se puede hacer uno personalizado; .NET Framework simplemente no se ejecutará en Linux.
Es por eso que Microsoft creó .NET Core (y ahora solo se llama .NET) y ASP.NET Core, por lo que serían multiplataforma y podría usarlos en Linux, incluidas las imágenes de contenedor basadas en Linux.
Como se sugiere en algunos comentarios, es posible que pueda usar mono. Mono es una implementación (no realmente compatible) de .NET Framework que pretende funcionar en Linux. No es 100% compatible con .NET Framework, por lo que su aplicación puede o no funcionar con él.
Una opción mejor, pero más difícil, sería migrar su aplicación a ASP.NET Core 6, que es compatible con contenedores basados en Linux.
Finalmente, después de una semana de intentarlo, pude obtener una respuesta.
Tenemos que basar la imagen en Nginx e instalarle el mono.
Publique su proyecto ASP en la carpeta dist .
En la carpeta Nginx, cree una carpeta con el nombre de los sites-available .
En la carpeta de sitios disponibles, cree un archivo con el nombre default y los siguientes códigos:
servidor { escuchar 80; acceso_log /var/log/nginx/mono-fastcgi.log; raíz /var/www/; token_servidor desactivado; more_clear_headers Servidor X-AspNet-Version;
location / { index index.html index.htm default.aspx Default.aspx; fastcgi_index /; fastcgi_pass unix:/var/run/mono-fastcgi.sock; include /etc/nginx/fastcgi_params; }}
En la carpeta Nginx crea un archivo con el nombre fastcgi_params y los siguientes códigos:
fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; fastcgi_param SCRIPT_NAME $fastcgi_script_name; fastcgi_param REQUEST_URI $request_uri; fastcgi_param DOCUMENT_URI $document_uri; fastcgi_param DOCUMENT_ROOT $document_root; fastcgi_param SERVER_PROTOCOL $server_protocol; fastcgi_param REQUEST_SCHEME $scheme; fastcgi_param HTTPS $https if_not_empty; fastcgi_param GATEWAY_INTERFACE CGI/1.1; fastcgi_param SERVER_SOFTWARE nginx/$nginx_version; fastcgi_param REMOTE_ADDR $remote_addr; fastcgi_param REMOTE_PORT $remote_port; fastcgi_param SERVER_ADDR $server_addr; fastcgi_param SERVER_PORT $server_port; fastcgi_param SERVER_NAME $server_name; fastcgi_param PATH_INFO ""; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;sample.webapp y los siguientes códigos: <?xml version="1.0" encoding="UTF-8"?> <apps> <web-application> <name>root</name> <vhost>*</vhost> <vport>-1</vport> <vpath>/</vpath> <path>/var/www/sample-app/</path> </web-application> </apps>supervisord.conf : [supervisord] logfile=/var/log/supervisor/supervisord.log logfile_maxbytes = 50MB nodaemon=true user=root [program:mono] command=fastcgi-mono-server4 --appconfigdir=/etc/mono/pools --socket=unix --filename=/var/run/mono-fastcgi.sock --printlog --name=mono user=root stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 [program:nginx] command=nginx user=root stdout_logfile=/dev/stdout stdout_logfile_maxbytes=0 stderr_logfile=/dev/stderr stderr_logfile_maxbytes=0 FROM mono:latest RUN apt-get update \ && apt-get install -y \ iproute2 supervisor ca-certificates-mono fsharp mono-vbnc nuget \ referenceassemblies-pcl mono-fastcgi-server4 nginx nginx-extras \ && rm -rf /var/lib/apt/lists/* /tmp/* \ && echo "daemon off;" | cat - /etc/nginx/nginx.conf > temp && mv temp /etc/nginx/nginx.conf \ && sed -i -e 's/www-data/root/g' /etc/nginx/nginx.conf COPY nginx/ /etc/nginx/ COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf COPY pools /etc/mono/pools COPY dist /var/www/sample-app EXPOSE 80 ENTRYPOINT [ "/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf" ]