何らかのコンテキストの問題であると思われます。 Skaffoldを使用してローカルのKubernetesクラスターをスピンアップするときにこれが正常に機能する理由を理解しようとしていますが、Azureにプッシュするときにイメージを適切に構築できません。
基本的な構造は次のとおりです。
test-app/
server/
requirements.txt
Dockerfile
Azure-pipeline.yml
skaffold.yaml
私は次のようなプロダクションserver/Dockerfile
を持っています:
FROM python:3.7-slim
ENV PYTHONUNBUFFERED 1
WORKDIR '/app'
EXPOSE 5000
COPY ./server/requirements.txt .
RUN pip install -r requirements.txt
COPY ./server .
CMD ["python", "manage.py", "collectstatic"]
CMD ["gunicorn", "-b", ":5000", "--log-level", "info", "config.wsgi:application"]
Azure DevOpsのパイプラインセクションで生成されたAzure-pipelines.yml
を使用しています。
# Docker
# Build and Push an image to Azure Container Registry
# https://docs.Microsoft.com/Azure/devops/pipelines/languages/docker
trigger:
- master
resources:
- repo: self
variables:
# Container registry service connection established during pipeline creation
dockerRegistryServiceConnection: '<connection-string>'
imageRepository: 'testapp'
containerRegistry: 'testappcontainers.azurecr.io'
dockerfilePath: '$(Build.SourcesDirectory)/server/Dockerfile'
tag: '$(Build.BuildId)'
# Agent VM image name
vmImageName: 'ubuntu-latest'
stages:
- stage: Build
displayName: Build and Push stage
jobs:
- job: Build
displayName: Build
pool:
vmImage: $(vmImageName)
steps:
- task: Docker@2
displayName: Build and Push an image to container registry
inputs:
command: buildAndPush
repository: $(imageRepository)
dockerfile: $(dockerfilePath)
containerRegistry: $(dockerRegistryServiceConnection)
tags: |
$(tag)
自動ビルド中にCOPY ./server/requirements.txt .
に到達し、タイトルにエラーをスローします。
この質問 を読んで、私は解決策のない提案された解決策をいくつか試しました:
COPY ./server/requirements.txt /app
COPY server/requirements.txt /app
さらに、私も試したところ:
COPY requirements.txt /app
それでもエラーが発生します。
だから、一種の困惑した:
実際、 example project は同様のプロジェクト構造を持っています:
pipelines-javascript-docker/
app/
Dockerfile
そして、それはうまくいきます...いくつかはおそらく何かを見落としているようです。
サンプルプロジェクトをより詳しく調べたところ、これは私がやろうとしているのと同じ構造で、結局Dockerfile
フォーマットをコピーすることになりました。私はこれでうまくいきました:
FROM python:3.7-slim
ENV PYTHONUNBUFFERED 1
WORKDIR /app
EXPOSE 5000
COPY requirements*.txt ./
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "manage.py", "collectstatic"]
CMD ["gunicorn", "-b", ":5000", "--log-level", "info", "config.wsgi:application"]
この障害に遭遇したとき、ymlファイルにプロパティbuildContextを設定して解決しました。
- task: Docker@2
displayName: Build and Push an image to container registry
inputs:
containerRegistry: '$(ACR.Connector)'
repository: '$(imageName)'
command: 'buildAndPush'
Dockerfile: '$(Agent.BuildDirectory)/s/server/Dockerfile'
buildContext: '$(Agent.BuildDirectory)/s'
tags: '$(tag)'