.netフレームワーク4.8で実行される単純なWindowsサービスをコンテナ化しました。アプリとコンテナはどちらも、このdockerfileを使用してローカルでビルドおよび実行できます。
FROM ourcontainerregistry.azurecr.io/net-framework-base:latest
WORKDIR /app
RUN cmd MSBuild.exe /property:Configuration=Release
COPY TopShelfServiceInstaller/bin/Release/ .
ENTRYPOINT ["TopShelfServiceInstaller.exe"]
Dockerデスクトップでローカルにコンテナーに接続すると、C:/ appディレクトリにあるファイルが表示され、サービスが期待どおりに動作していることを確認できます。
ただし、windows-latestビルドエージェントを使用してAzure Devopsのパイプラインでこのdockerfileを実行しようとすると、COPYステップで次のエラーが発生し続けます。
COPY failed: CreateFile \\?\C:\ProgramData\docker\tmp\docker-builder002424695\TopShelfServiceInstaller\bin\Release: The system cannot find the path specified.
なぜこれが起こっているのか、そしてどうすれば修正できるのか?
編集:ビルドのazure-pipelines.yml:
resources:
repositories:
- repository: net-framework-base
type: git
name: Container_DotNetFrameworkBase
containers:
- container: net-framework-base
type: ACR
azureSubscription: ---
resourceGroup: ---
registry: ---
repository: net-framework-base
variables:
- name: dockerRegistryServiceConnection
value: ---
- name: imageRepository
value: "service"
- name: containerRegistry
value: ---
- name: prod-container-registry
value: ---
- name: dockerfilePath
value: "$(Build.SourcesDirectory)/Service/dockerfile"
- name: tag
value: "$(Build.BuildNumber)"
- name: vmImageName
value: "windows-latest"
trigger:
batch: true
branches:
include:
- feature/*
#pr:
stages:
- stage: container
displayName: New Docker Build
dependsOn: []
jobs:
- job: container
displayName: build container
pool:
vmImage: $(vmImageName)
steps:
- checkout: self
fetchDepth: 1
- checkout: net-framework-base
fetchDepth: 1
# this is the task that's failing
- task: Docker@2
displayName: build container
inputs:
containerRegistry: $(prod-container-registry)
repository: $(imageRepository)
command: "build"
Dockerfile: $(dockerfilePath)
tags: |
$(tag)
COPY
コマンドがあなたが思っていることをしていないと思います。COPY
コピーしたファイルからのホストファイルシステムを内のコンテナ。ローカルで機能する理由は、ローカルでコードをビルドしたため、ローカルでビルドしたバージョンをコンテナにコピーするためです。
あなたがしなければならないことはCOPY
、ソースコードをコンテナに入れ、アプリケーションを構築するために必要なあらゆるステップを実行することです。これにはマルチステージビルドを使用することもお勧めします。SDKとビルドツールチェーンを使用してソースコードをコンテナーにコピーし、それをビルドして、結果の出力を、ランタイム環境のみを含むスリム化されたランタイムコンテナーにコピーします。ソースコードなし。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加