web-dev-qa-db-fra.com

Échec de la copie: STAT /VAR/LIB/DOCKER/TMP/DOCKER-Builder<Num>/server/requirements.txt: Aucun fichier ou répertoire de ce type

Semble être une sorte de problème de contexte. J'essaie de comprendre pourquoi cela fonctionnerait bien lors de la filature d'un clope Kubettes local avec un skaffolde, mais ne construisait pas à construire l'image correctement lorsque vous poussez à Azure.

La structure de base est la suivante:

test-app/
  server/
    requirements.txt
    Dockerfile
Azure-pipeline.yml
skaffold.yaml

J'ai la production server/Dockerfile comme suit:

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"]

J'utilise le Azure-pipelines.yml Cela a été généré pour moi dans la section Pipelines de Azure Devops:

# 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)

Pendant la construction automatisée, il arrive à COPY ./server/requirements.txt . Et la jette l'erreur dans le titre.

Lecture Cette question , j'ai essayé un certain nombre de solutions suggérées sans résolution, comme:

COPY ./server/requirements.txt /app
COPY server/requirements.txt /app

De plus, j'ai aussi juste essayé:

COPY requirements.txt /app

Toujours obtenir l'erreur.

Donc, une sorte de stupoudé sur:

  1. Comment résoudre ce problème afin qu'il se développe correctement dans les pipelines et pousse à CRS ...
  2. S'il s'agit d'un problème de contexte, pourquoi un problème n'est pas dans le développement local lorsque vous utilisez Skaffold

En fait, le exemple projet a une structure de projet similaire:

pipelines-javascript-docker/
  app/
    Dockerfile

Et ça marche bien ... Certains que je néglige probablement quelque chose apparemment.

3
cjones

Après avoir examiné le projet d'exemple de plus près, qui a la même structure que ce que j'essaie de faire, j'ai fini par copier son formatage Dockerfile. J'ai fini avec cela qui fonctionne bien:

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

Lorsque j'ai rencontré cet obstacle, j'ai résolu en configurant la propriété BuildContext dans le fichier YML.

- 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