web-dev-qa-db-ja.com

コピーに失敗しました:stat /var/lib/docker/tmp/docker-builder<num>/server/requirements.txt:そのようなファイルまたはディレクトリはありません

何らかのコンテキストの問題であると思われます。 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

それでもエラーが発生します。

だから、一種の困惑した:

  1. これを解決してパイプラインで正しくビルドし、CRSにプッシュする方法...
  2. コンテキストの問題である場合、Skaffoldを使用するときにローカル開発者の問題ではないのはなぜですか

実際、 example project は同様のプロジェクト構造を持っています:

pipelines-javascript-docker/
  app/
    Dockerfile

そして、それはうまくいきます...いくつかはおそらく何かを見落としているようです。

1
eox.dev

サンプルプロジェクトをより詳しく調べたところ、これは私がやろうとしているのと同じ構造で、結局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"]
1
eox.dev

この障害に遭遇したとき、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)'
1
NPeniate