Creé una aplicación simple que se conecta a PostgreSQL, pero cuando la contuve usando Docker, parece que no puedo iniciarla y no se mostró ningún puerto cuando ejecuté el contenedor. ¿Cuál parece ser el problema?
La aplicación funciona sin Docker, pero cuando la contenedorizo, ahí es donde surge el problema.
docker build es exitosa y cuando uso la docker run
me da un contenedor pero cuando lo verifico usando docker ps -a no se muestran puertos
Esto es lo que hice en la terminal docker
y este es mi código cuando me conecto a PostgreSQL db
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(); } }aquí está mi archivo 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"]Editar: cambié mi archivo Docker a esto y de alguna manera puedo obtener el puerto ahora
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"]Pero no puedo ejecutarlo. Aquí está la captura de pantalla
Cualquier ayuda sería muy apreciada. ¡Gracias! PD: soy novato
host.docker.internal . Más sobre eso aquí .PD: soy novato
Consejo profesional para ti :p
Es posible que no desee usar -d en el contenedor en el que está trabajando, por lo que verá sus registros allí mismo. Si no lo hubiera usado, habría visto la salida del proceso y no se habría preguntado por qué no se muestra ningún puerto allí :)
ACTUALIZAR:
-d : docker run -p 8080:80 --name test webapp1 Esto le mostrará el bloqueo de la aplicación aspnet. Verás lo que está pasando. En este caso, como sé lo que está pasando, puedo ayudar, pero en general quieres saber qué está pasando. Lo hace al no ejecutarlo en un estado separado para cosas pequeñas como esta, y al usar los docker logs cuando hay mucho que analizar. De todas formas...host.docker.internal como host. P.ej: Host=host.docker.internal;Username=postgres;Password=password;Database=user Esto solo funciona si usa Docker para Windows o Docker para Mac. No funciona en Docker Toolbox o en Linux AFAIK.host.docker.internal cuando se ejecuta dentro de docker y localhost de lo contrario. Mi sugerencia fue leerlo desde config.