Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Cannot acces Asp.Net Core on local Docker Container

Tags:

docker

asp.net

I've created a app in asp.net core and create a dockerfile to generate a local image and run it.

FROM microsoft/dotnet:latest

COPY . /app

WORKDIR /app

RUN ["dotnet", "restore"]

RUN ["dotnet", "build"]

EXPOSE 5000/tcp

ENTRYPOINT ["dotnet", "run", "--server.urls", "http://0.0.0.0:5000"]

Then, I've builded my image with the following command

docker build -t jedidocker/first .

Then, I've created a container with the following command

docker run -t -d -p 5000:5000 jedidocker/first

But when I run the following url into my host browser

http://localhost:5000/

I have an ERR_EMPTY_RESPONSE

is it a network problem? How can I solve it?

P.S: My windows version is 10.0.10586

like image 639
Jedi31 Avatar asked Aug 19 '16 18:08

Jedi31


People also ask

How do I connect to Docker containers locally?

Use --network="host" in your docker run command, then 127.0.0.1 in your docker container will point to your docker host.

Can ASP.NET application be run in Docker container?

Choose the docker option to run the application as shown in the following image. After clicking on the docker option, it will build code, create a docker image as well as a docker container and run the application inside the docker container without using the docker commands on the windows command prompt.


3 Answers

I had the same issue and found the solution to this. You will need to change the default listening hostname. By default, the app will listen to the localhost, ignoring any incoming requests from outside the container. Change your code in program.cs to listen for all incoming calls:

public class Program
{
    public static void Main(string[] args)
    {
        var host = new WebHostBuilder()
            .UseKestrel()
            .UseContentRoot(Directory.GetCurrentDirectory())
            .UseUrls("http://*:5000")
            .UseIISIntegration()
            .UseStartup<Startup>()
            .Build();

        host.Run();
    }
}

More info:

https://medium.com/trafi-tech-beat/running-net-core-on-docker-c438889eb5a#.hwhoak2c0

Make sure you are running the container with the -p flag with the port binding.

docker run -p 5000:5000 <containerid>

At the time of this writing, it seems that the

EXPOSE 5000:5000

command does not have the same effect as the -p command. I haven't had real success with -P (upper case) either.

Edit 8/28/2016:

One thing to note. If you are using docker compose with the -d (detached) mode, it may take a little while for the dotnet run command to launch the server. Until it's done executing the command (and any other before it), you will receive ERR_EMPTY_RESPONSE in Chrome.

like image 138
Serguei Fedorov Avatar answered Sep 20 '22 14:09

Serguei Fedorov


Just update your entry point as follows, no code change is required:

ENTRYPOINT ["dotnet", "run", "--server.urls", "http://*:5000"]

The default Docker network on Windows Server 2016 is NAT, so you may want to use the IP which you can find out with docker inspect <container name/ID>. Not sure if this is the case with other Windows versions as well.

like image 44
Balint Bako Avatar answered Sep 22 '22 14:09

Balint Bako


Here's what worked for me in ASP.NET 3.1

On the Dockerfile You need to specify the ENV ASPNETCORE_URLS

ENV ASPNETCORE_URLS http://*:5000

then EXPOSE the PORT

EXPOSE 5000
like image 23
Ron Michael Avatar answered Sep 22 '22 14:09

Ron Michael