VS2017でdocker-composeをサポートするシンプルなDotnetCoreアプリケーションを構築しています。
2つのDockerfileがあり、1つはアプリ用、もう1つはNGINXプロキシ用です。その上に、これらの両方を一緒にラップするdocker-compose.ymlファイルがあります。
これはaspnetcoreアプリのDockerfileです。そこには多くのCOPYステートメントがあり、すべて正しく動作します!
FROM Microsoft/dotnet:2.0-runtime AS base
WORKDIR /app
FROM Microsoft/dotnet:2.0-sdk AS build
WORKDIR /src
COPY CoreServer.sln ./
COPY CoreServer/CoreServer.csproj CoreServer/
RUN dotnet restore -nowarn:msb3202,nu1503
COPY . .
WORKDIR /src/CoreServer
RUN dotnet build -c Release -o /app
FROM build AS publish
RUN dotnet publish -c Release -o /app
FROM base AS final
WORKDIR /app
COPY --from=publish /app .
ENTRYPOINT ["dotnet", "CoreServer.dll"]
これはnginx Dockerfileであり、ファイルを適切にコピーできません。代わりに、次のエラーを出力します。
コピーに失敗しました:stat /var/lib/docker/tmp/docker-builder780242597/nginx.conf:そのようなファイルまたはディレクトリはありません。 #1859
FROM nginx
WORKDIR /etc/nginx
COPY nginx.conf ./
COPY server.crt ./
COPY server.key ./
このDockerfileを単独でビルドしてみましたが、動作しますが、docker-composeを使用すると上記のエラーが発生します。
これはdocker-compose.ymlファイルがどのように見えるかです
version: '3'
services:
coreserver:
image: coreserver
build:
context: .
dockerfile: CoreServer/Dockerfile
expose:
- "5000"
nginx:
build:
context: .
dockerfile: nginx/Dockerfile
ports:
- "80:80"
- "443:443"
links:
- coreserver
完全なプロジェクトを確認したい場合は、サーバーとクライアントアプリケーションを備えたdotnetcore websocketサーバーテストアプリケーションです。
https://github.com/avboivin/WssCoreServer/tree/master/server
誰かがdocker sendにこの特定のエラーを与えるように私が間違っていることを教えてもらえますか?
これはバグのようです。
私はここで解決策を見つけました:
https://github.com/docker/for-mac/issues/1922#issuecomment-355364451
これは、問題が発生していたDockerfileをdocker-compose.yamlファイルのルートレベルで移動しただけです。
https://docs.docker.com/engine/reference/builder/#copy から。言う:
COPYは次の規則に従います。
[src]パスはビルドのコンテキスト内にある必要があります。 ../something/somethingをコピーすることはできません。Dockerビルドの最初のステップは、コンテキストディレクトリ(およびサブディレクトリ)をdockerデーモンに送信することです。
[src]がディレクトリの場合、ファイルシステムメタデータを含め、ディレクトリの内容全体がコピーされます。
バグではありません。 COPYは絶対パスからファイルを読み取ることができません。
したがって、解決策は、source dir/filesと同じディレクトリにdocker-compose.ymlを作成して実行することです。