0

dockerfileRUNが表示されます。ENTRYPOINTのボリュームディレクトリは表示されません。ここでRUNコマンドでボリュームにアクセスできない

は問題を抱えているdockerfiledocker-compose.ymlと例です。

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

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 

私はdocker-compose upを実行すると、私は以下のようなエラーが出ます:

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 

私がコメントした場合RUN dotnet restoreを実行してdocker-composeを実行する前に手動でdotnet restoreを実行すると問題なく動作します。

何らかの理由でRUNは私のボリュームディレクトリを見ることができず、ENTRYPOINTは私のボリュームディレクトリを見ることができます。

+0

ボリュームの内容がコンテナを識別するために使用されるハッシュの一部であると予想します。その内容が変更されたときに 'dotnet restore'コマンドが再起動されるようにしますか?もしそうなら、あなたはこれをボリュームにしたくないのですが、それをコンテナの状態の一部とみなすようにコピーしたいと思います。 –

答えて

2

Dockerfile内の文は、ビルド時にdocker build)で実行され、この時点ではボリュームは存在しません。これとは対照的に

ENTRYPOINTは、潜在的にマッピングされたボリュームへのアクセスを持っています実行コンテナ(docker run)が実行されます。

+0

これは私がこれを達成する方法はありますか? –

+0

Dockerファイルがあるフォルダに.NETプロジェクトを追加できます。これにより、ビルドプロセス中に利用できるようになります。 – Sebastian

+0

"this"の意味に依存します。 'dotnet restore'が' dotnet run'の前に呼び出されるようにしたいのですか?次に両方のコマンドをENTRYPOINTに折り畳んでください。 –

関連する問題