在Azure管道作业中运行的装入坞站 [英] Mounting docker run in Azure Pipeline job

查看:7
本文介绍了在Azure管道作业中运行的装入坞站的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试将存储库的根装载到Azure管道作业中的停靠容器。在我的Windows本地上,我可以成功地将源设置为$(pwd),但是在我的Ubuntu托管代理上,我在使用$(Build.SourcesDirectory)时出现以下错误:

docker:来自后台进程的错误响应:类型的装载配置无效 绑定&q;:绑定装入源路径不存在:/var/vsts/28/s。

路径/var/vsts/28/s是正确的,那么有什么问题?

YAML定义:

jobs:
- job: Run
  pool:
    name: 'Docker'
  steps:
  - task: Docker@2
    displayName: Login to ACR
    inputs:
      command: login
      containerRegistry: acrServiceConnection
  - task: PowerShell@2
    inputs:
      displayName: Run pulumi go
      targetType: inline
      script: |
        docker run --rm --mount type=bind,source=$(Build.SourcesDirectory),target=/project myimage:latest

编辑:

使用MS托管代理时,上述功能工作正常。这让我相信这是结账地点的许可问题。对此有什么建议吗?

我在运行ls -l时在我们的自托管代理和MS代理上得到相同的结果:

drwxr-xr-x 8 root root 4096 Sep  9 16:09 folder
-rw-r--r-- 1 root root 1347 Sep  9 16:09 file
-rw-r--r-- 1 root root  178 Sep  9 16:09 ..
-rw-r--r-- 1 root root 5457 Sep  9 16:09 ..

Ubuntu

没有特别提到如何设置自托管代理,可以运行直接安装到VM中的推荐答案代理,也可以作为Docker container运行。

如果代理作为Docker容器运行,则错误可能来自内部容器启动时它引用的路径仅存在于外部容器中,而不存在于主机上。

当您在管道内运行Docker容器,并且该管道在代理内执行时,还启动了Docker容器,则会发生以下情况

|=============================================|
|                    HOST                     |
|   |------------------------------------|    |
|   |       Outer container (Agent)      |    |  
|   |                                    |    |
|   |------------------------------------|    |
|                                             |
|   |------------------------------------|    |
|   |       Inner container (Agent)      |    |  
|   |       (Started from pipeline)      |    |
|   |------------------------------------|    |
|                                             |
|=============================================|

当一个Docker容器在另一个Docker容器内运行时,它们都使用主机的docker守护进程,因此无论是从主机还是从外部容器启动新容器,所有挂载路径都会引用该主机

示例1:将路径从主机挂载到外容器

docker run ... -v <path-on-host>:<path-on-outer-container> ...

示例2:将路径从主机挂载到内容器

docker run ... -v <path-on-host>:<path-on-inner-container> ...

示例2:将路径从外容器挂载到内容器 如果没有解决方法,无法将路径从外部容器装载到内部容器,因为这两个容器都在主机上的守护进程上运行。

您可以确保主机上存在装入外容器和内容器的共享空间(&p>)。(请注意,即使内部容器是从外部启动的,也要始终指定主机上的有效路径)

另一个选项是Microsoft Docker代理文档中Mounting volumes using Docker within a Docker container一节中介绍的选项:

启动外容器时声明ENV变量:

docker run ... --env DIND_USER_HOME=$HOME ...

之后,我们可以从外部容器启动内部容器:

docker run ... -v $DIND_USER_HOME:<path-on-inner-container> ...

这篇关于在Azure管道作业中运行的装入坞站的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆