【问题标题】:COPY failed: stat /var/lib/docker/tmp/docker-builder<num>/server/requirements.txt: no such file or directory复制失败:stat /var/lib/docker/tmp/docker-builder<num>/server/requirements.txt:没有这样的文件或目录
【发布时间】:2019-12-09 20:37:37
【问题描述】:

似乎是某种上下文问题。我试图弄清楚为什么在使用 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 的 Pipelines 部分为我生成的 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

还是报错。

所以,有点难过:

  1. 如何解决此问题,以便在 Pipelines 中正确构建并推送到 CRS...
  2. 如果是上下文问题,为什么在使用 Skaffold 时在本地开发中不是问题

其实example project也有类似的项目结构:

pipelines-javascript-docker/
  app/
    Dockerfile

而且它运行良好......有些我可能显然忽略了一些东西。

【问题讨论】:

    标签: django azure docker azure-devops azure-container-service


    【解决方案1】:

    当我遇到这个障碍时,我通过在 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)'
    

    【讨论】:

    • 在 linux 容器中的 .netCore 3 应用程序的 azure 管道构建中也为我解决了这个问题
    【解决方案2】:

    在更仔细地查看示例项目后,它与我正在尝试做的结构相同,我最终复制了它的 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"]
    

    【讨论】:

    • 你解决的太好了,你可以接受上面的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-07-16
    • 2019-08-30
    • 2019-02-27
    • 2020-08-09
    • 2019-09-06
    相关资源
    最近更新 更多