7

私はC#ソリューションを持っています。4つのプロジェクトがあり、3つはDLLで、1つはコンソールアプリケーションがそれらのDLLを使用しています。

Visual Studio で docker サポートを使用して docker イメージをビルドしようとしましたが、次のように My dockerfile に失敗します。

> FROM microsoft/windowsservercore:ltsc2016 
> EXPOSE 80 
> EXPOSE 1433 
> EXPOSE 29051
> 
> COPY bin/x64/debug /root/ ENTRYPOINT
> /root/RmsMainConsole.exe

dockerfile があるディレクトリに CD を移動し、docker build を実行します。エラー:

Docker CLI command : docker build -t rmsmainconsole:self-hosted .

Sending build context to Docker daemon  55.61MB
Step 1/6 : FROM microsoft/windowsservercore:ltsc2016
 ---> 9dbf7f740334
Step 2/6 : EXPOSE 80
 ---> Using cache
 ---> ad0ad85fd107
Step 3/6 : EXPOSE 1433
 ---> Using cache
 ---> 81ba13dbd4d4
Step 4/6 : EXPOSE 29051
 ---> Using cache
 ---> 1fa3db800abf
Step 5/6 : COPY bin/x64/debug /root/
COPY failed: CreateFile \\?\C:\ProgramData\Docker\tmp\docker-builder043346063\bin\x64\debug: The system cannot find the path specified.

PATH が見つからないことがわかります。一方、.sln レベルで docker ファイルを作成しようとしました。docker ファイルの 1 行を変更しました。

COPY RmsMainConsole/bin/x64/debug /root/

注: 「RmsMainConsole」ディレクトリが追加されました。

.sln レベルで docker ビルドを実行し、正常にビルドしました。ログは次のとおりです。

Sending build context to Docker daemon   1.15GB
Step 1/6 : FROM microsoft/windowsservercore:ltsc2016
 ---> 9dbf7f740334
Step 2/6 : EXPOSE 80
 ---> Running in fe97cf236d5a
Removing intermediate container fe97cf236d5a
 ---> c31e236353b6
Step 3/6 : EXPOSE 1433
 ---> Running in f031fce5ecba
Removing intermediate container f031fce5ecba
 ---> 96c704c68ffb
Step 4/6 : EXPOSE 29051
 ---> Running in 365e2be43d0e
Removing intermediate container 365e2be43d0e
 ---> d30c3fb2214b
Step 5/6 : COPY RmsMainConsole/bin/x64/debug /root/
 ---> b214c1edc256
Step 6/6 : ENTRYPOINT /root/RmsMainConsole.exe
 ---> Running in 5c819915532a
Removing intermediate container 5c819915532a
 ---> 247f01bb9b82
Successfully built 247f01bb9b82
Successfully tagged rmsmainconsole:self-hosted

成功したビルドと失敗したビルドの 2 つの違いに気付きました: 1. Docker コンテキストのサイズ 2. ステップ 5/6 のログ:

COPY に失敗しました: CreateFile \?\C:\ProgramData\Docker\tmp\docker-builder043346063\bin\x64\debug: 指定されたパスが見つかりません。

---> b214c1edc256

Visual Studio Docker サポートを使用して Docker イメージをビルドするにはどうすればよいですか。どこで私は間違えましたか ?

4

3 に答える 3

6

私があなたの質問に答えるかどうかはわかりません-最初か2番目:)。

Dockerfile はプロジェクト フォルダー内に作成されるため、Visual Studio が Docker をどのように使用しているかについても疑問に思っていましたが、ルート (sln) フォルダーにあったような COPY のパスが含まれています。

少し遊んでみましたが、答えは非常に簡単です。

Visual Studio は、-fスイッチを使用してソリューション フォルダーからイメージをビルドし、Dockerfile をポイントします。ウィンドウを監視Outputして、次のコマンドを実行していることを確認できます。

docker build -f "<path to Dockerfile>" -t <name:tag> --target base  --label "com.microsoft.created-by=visual-studio" "<solution dir>"

そのため、プロジェクト フォルダーに Dockerfile を配置し、-fVisual Studio のようにオプションを使用してルート フォルダーから実行することをお勧めします。

それはあなたの質問に答えますか?

于 2019-02-07T09:35:43.333 に答える