首页 > 解决方案 > docker pull - Azure DevOps 中的无效参考格式

问题描述

我正在尝试以动态方式在我的管道中提取图像。我有一个名为“images.txt”的文件,其中包含:

(cat images.txt 会返回)

 cat images.txt
    python:3.8-slim
    neo4j

在 azure 管道中拉取图像的方法是:

该代码有效,但不是动态的:

steps:
   - bash: |
         y='python:3.8-slim' 
         docker pull ${y}

    displayName: "Docker pull"

在天蓝色的管道中,我这样做:

 - bash: |
    #x='python:3.8-slim'
    filename='images.txt'
    n=1
    while read line; do
       echo "pulling image"
       echo ${line}
       n=$((n+1))
       docker pull ${line}
   done < $filename

取而代之的是docker pull ${line} 我尝试了各种替代方法,但都没有效果。我总是收到错误“无效的参考格式”我试过:

     #eval docker pull "$line"
     #eval docker pull $line
     #eval docker pull $line
     #eval docker pull "$line"
     #eval docker pull "\${line}"
     #docker pull "\${line}"
     #docker pull $line
     #docker pull "$line"
     #docker pull $(line)

任何想法都将不胜感激

更新:为@Paul Rey 提供的代码

 filename='images.txt'
 n=1
 echo "docker pull"
 for line in $(cat ${filename}); 
 do
   echo ${line}
   docker pull ${line}
 done

它在图像没有标记时起作用,因此图像:neo4j 成功拉出但使用 python:3.8-slim 我收到“无效参考格式”的错误 在此处输入图像描述

标签: bashdockerazure-devopsazure-pipelinesazure-pipelines-yaml

解决方案


我认为docker pull ${line}是正确的。但是你能确保images.txt格式正确吗?我的意思是,看起来每行都有额外的空格。也许也有结束行字符。

如果每行只有一个单词,则可以选择循环:

for line in $(cat ${filename}); do
    docker pull ${line}
done

推荐阅读