在Azure管道作业中运行的装入坞站 [英] Mounting docker run in Azure Pipeline job
问题描述
我正在尝试将存储库的根装载到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屋!