0

Es erscheint RUN in einem dockerfile kann mein Volume-Verzeichnis nicht sehen, wo ENTRYPOINT kann.RUN-Befehl kann nicht auf Volumes zugreifen

Hier ist ein Beispiel mit einem dockerfile und docker-compose.yml, die das Problem mit sich:

FROM microsoft/dotnet:2.0-sdk 
EXPOSE 5000 
ENV ASPNETCORE_ENVIRONMENT=Development 
WORKDIR /src/testing 
RUN dotnet restore 
ENTRYPOINT ["dotnet", "run", "--urls=http://0.0.0.0:5000"] 

docker-compose.yml:

MSBUILD : error MSB1003: Specify a project or solution file. The current working directory does not contain a project or solution file. 
ERROR: Service 'doctnetcore-api-project' failed to build: The command '/bin/sh -c dotnet restore' returned a non-zero code: 1 
:

version: "3.4" 

services: 
    doctnetcore-api-project: 
    build: ./api/ 
    container_name: doctnetcore-api-project 
    image: doctnetcore-api-project:development 
    restart: 'always' 
    networks: 
     - mynetwork 
    volumes: 
     - /api/src:/src 

networks: 
    mywebmc: 
    external: 
     name: mynetwork 

Als ich docker-compose up betreibe ich erhalte eine Fehlermeldung unten

Wenn ich auskommentieren RUN dotnet restore und führen Sie dotnet restore manuell vor dem Ausführen docker-compose, funktioniert es gut.

Also aus welchem ​​Grund auch immer erscheint RUN kann mein Volume-Verzeichnis nicht sehen und ENTRYPOINT kann mein Volume-Verzeichnis sehen.

+0

Erwarten Sie, dass der Inhalt des Volumes Teil des Hashes ist, der zum Identifizieren des Containers verwendet wird, sodass, wenn sich diese Inhalte ändern, der Befehl 'dotnet restore' erneut aufgerufen wird? Wenn dies der Fall ist, möchten Sie nicht, dass es sich um ein Volume handelt, sondern möchten es so kopieren, dass es als Teil des Containerstatus betrachtet wird. –

Antwort

2

Die Anweisungen in einer Dockerfile werden bei Build-Zeit (docker build) ausgeführt und zu diesem Zeitpunkt sind keine Volumes vorhanden.

Im Gegensatz dazu wird die ENTRYPOINT ausgeführt, wenn Sie Lauf einen Behälter (docker run), die den Zugriff auf potenziell abgebildet Volumen hat.

+0

Also gibt es eine Möglichkeit, dies zu erreichen? –

+0

Sie können Ihr .NET-Projekt zu dem Ordner hinzufügen, in dem sich die Docker-Datei befindet. Dadurch wird es während des Erstellungsprozesses verfügbar gemacht. – Sebastian

+0

Hängt davon ab, was du mit "this" meinst. Möchten Sie nur sicherstellen, dass 'dotnet restore' vor dem' dotnet run' aufgerufen wird? Dann falten Sie beide Befehle in Ihren ENTRYPOINT und schon sind Sie dran. –

Verwandte Themen