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:
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.
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"]
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)'