COPY 失败:stat /var/lib/docker/tmp/docker-builder<num>/server/requirements.txt:没有那个文件或目录
COPY failed: stat /var/lib/docker/tmp/docker-builder<num>/server/requirements.txt: no such file or directory
似乎是某种上下文问题。我试图弄清楚为什么在使用 Skaffold 启动本地 Kubernetes cluser 时这会正常工作,但在推送到 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 .
并在标题中抛出错误。
阅读 this question,我尝试了一些建议的解决方案但没有解决方案,例如:
COPY ./server/requirements.txt /app
COPY server/requirements.txt /app
另外,我也刚试过:
COPY requirements.txt /app
仍然出现错误。
所以,有点难倒:
- 如何解决这个问题,以便它在管道中正确构建并推送到 CRS...
- 如果是上下文问题,为什么在使用 Skaffold 时在本地开发中不是问题
实际上,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)'
似乎是某种上下文问题。我试图弄清楚为什么在使用 Skaffold 启动本地 Kubernetes cluser 时这会正常工作,但在推送到 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 .
并在标题中抛出错误。
阅读 this question,我尝试了一些建议的解决方案但没有解决方案,例如:
COPY ./server/requirements.txt /app
COPY server/requirements.txt /app
另外,我也刚试过:
COPY requirements.txt /app
仍然出现错误。
所以,有点难倒:
- 如何解决这个问题,以便它在管道中正确构建并推送到 CRS...
- 如果是上下文问题,为什么在使用 Skaffold 时在本地开发中不是问题
实际上,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)'