2015-11-28 21 views
6

Ho seguito la seguente guida: Running ASP.NET 5 applications in Linux Containers with Docker e non riesco a farlo funzionare sul mio PC Windows o server Linux. Il mio dockerfile assomiglia a questo:Impossibile eseguire asp.net 5 dalla finestra mobile

FROM microsoft/aspnet 

COPY . /app 
WORKDIR /app 
RUN ["dnu", "restore"] 

EXPOSE 5000/tcp 
ENTRYPOINT ["dnx", "-p", "project.json", "web"] 

Allora ho fatto funzionare docker build -t myapp . e poi docker run -d -p 80:5000 myapp si dice che è in esecuzione, ma non posso aprire il sito web nel browser. So su Windows che dovresti trovare l'indirizzo IP su cui è diretta la macchina virtuale attuale usando docker-machine ip default che ha finito per essere 192.168.99.100 ma quando ho navigato su http://192.168.99.100 ho appena ricevuto il messaggio di errore generico "Questa pagina web non è disponibile". Ho anche provato diverse varianti di questo comando di esecuzione docker, come docker run -it -p 80:5000 myapp, docker run -p 80:5000 myapp, e ho anche provato diverse porte, come ad esempio docker run -d -p 5000:5000 myapp ma nulla sembra funzionare.

Ho provato questo sia sulla mia macchina Windows e sul mio server Linux, ma entrambi non funzionano.

Sono in grado di eseguire dnx web senza finestra mobile e tutto funziona come previsto.

+0

Stai utilizzando virtualbox o qualcosa del genere? O è una corretta installazione del server? – RubbleFord

risposta

3

Per una comprensione più completa dell'ambiente della tua app, pubblica il tuo file project.json e la versione beta di ASP.net con cui stai lavorando.

Per ora è possibile provare a pulire il Dockerfile eliminando gli argomenti "project.json" e "-p" dall'istruzione ENTRYPOINT, rimuovere tcp dal comando EXPOSE e infine specificare "--server.urls "argomento nell'istruzione entryPoint in modo che utilizzi 0.0.0.0 posto del localhost di default come segue:

FROM microsoft/aspnet 

COPY . /project   
WORKDIR /project  
RUN ["dnu", "restore"] 

EXPOSE 5000 

ENTRYPOINT ["dnx", "web", "--server.urls"] 

in alternativa, si può provare a far cadere il comando eSPORRE del tutto ed esporre la porta finestra mobile, 5000, nelle istruzioni entryPoint come segue:

FROM microsoft/aspnet 

COPY . /project   
WORKDIR /project  
RUN ["dnu", "restore"] 

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:500"] 

In entrambi i casi si sarebbe poi costruire il contenitore ed eseguirlo usando qualcosa come il seguente:

$ docker run -it -p 80:5000 myapp 
+0

Interessante che sto usando un progetto di esempio da asp.net e utilizzando una guida collegata direttamente dalla loro pagina mobile, e tuttavia non funziona. Puoi aggiungere una spiegazione sul motivo per cui funziona e forse perché ciò che forniscono non funziona? – socketman

+0

@socketman la guida collegata è di gennaio, che assomiglia alla beta2. Altre 6 beta sono state rilasciate da allora, e questo mese finalmente rc1. Un sacco è cambiato :) –

6

Date un'occhiata alla mia risposta qui: ASP.NET 5.0 beta 8 in Docker doesn't start

In sostanza, Docker inoltra le richieste al contenitore sul 0.0.0.0 interfaccia di rete, ma Kestrel è in ascolto solo su localhost per impostazione predefinita.

Quindi sì, le richieste vengono passate al contenitore docker, ma non vengono accettate dal server Web Kestrel. Per questo motivo, è necessario sostituire la proprietà server.urls come altri hanno scritto:

ENTRYPOINT ["dnx", "web", "--server.urls", "http://0.0.0.0:5000"] 

Si dovrebbe quindi vedere:

Now listening on: http://0.0.0.0:5000 

quando si esegue il vostro contenitore. È anche possibile eseguire un comando rapido docker ps per verificare che 0.0.0.0 sia in realtà l'interfaccia di rete per cui Docker sta inoltrando richieste.

Ho anche scritto un po 'su come ottenere ASP.NET 5 in esecuzione su Docker su Windows - è un po 'più complicato dal momento che Docker non deve solo inoltrare richieste al contenitore, ma dobbiamo far sì che VirtualBox trasmetta le richieste alla macchina virtuale Docker boot2docker (tipicamente chiamata default in Virtual Box) prima che Docker possa consegnarli al nostro contenitore.

Post è qui: http://dotnetliberty.com/index.php/2015/10/25/asp-net-5-running-in-docker-on-windows/

1

Si può trovare un lavoro, step-by-step tutorial per Docker e ASP.NET core RC1 qui: https://www.sesispla.net/blog/language/en/2015/12/recipe-asp-net-5-net-core-to-the-docker-container/

La parte difficile probabilmente manca è quello di modificare il vostro comando projects.json come segue:

"commands": { 
    "web": "Microsoft.AspNet.Server.Kestrel --server.urls http://0.0.0.0:5000" 
    }, 

Per impostazione predefinita, il gheppio connessioni solo accetta localhost ... Con questo cambiamento che consentono il collegamento da qualsiasi fonte.

2

Per chi ha questo problema ora in RC2, i comandi non esistono più. È necessario aggiornare Program.cs concatenando in .UseUrls ("http://0.0.0.0:5000"). Puoi anche passare da 5000 a qualunque sia la tua porta desiderata.

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

     host.Run(); 
    } 
} 
Problemi correlati