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ですが、ファイルのコピーがうまくいきません。代わりに以下のようなエラーが出力されています。
COPY failed: stat /var/lib/docker/tmp/docker-builder780242597/nginx.conf: no such file or directory.#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でこのようなエラーが出るのは、何か間違ったことをしているのか、誰か教えてください。
From https://docs.docker.com/engine/reference/builder/#copy. says:
COPYは以下のルールに従います。
- src] パスは、ビルドのコンテキスト内になければなりません。COPY ../something /something はできません。なぜなら、docker ビルドの最初のステップは、コンテキストディレクトリ(およびサブディレクトリ)を docker デーモンに送信することだからです。
- [src]がディレクトリの場合は、ファイルシステムのメタデータを含めて、ディレクトリのコンテンツ全体がコピーされます。
なので、バグではありません。COPYは、絶対パスからファイルを読み込めません。
そのため、SOURCEディレクトリ/ファイルと同じディレクトリにdocker-compose.ymlを作成し、実行することで解決します。