gpt4 book ai didi

docker - Packer尽管存在sudo,但我的docker构建失败并出现错误 “sudo: not found”

转载 作者:行者123 更新时间:2023-12-02 21:09:30 26 4
gpt4 key购买 nike

我正在尝试在其上构建带有docker的打包程序镜像,并且我希望docker使用自定义脚本创建docker镜像。我的代码的相关部分是(请注意,顶级构建器会仔细检查sudo是否已安装):

{
"type": "shell",
"inline": [
"apt-get install sudo"
]
},
{
"type": "docker",
"image": "python:3",
"commit": true,
"changes": [
"RUN pip install Flask",
"CMD [\"python\", \"echo.py\"]"
]
}

屏幕输出的相关部分是:
==> docker: provisioning with shell script: /var/folders/s8/g1_gobbldygook/T/packer-shell23453453245
docker: /temp/script_1234.sh: 3: /tmp/script_1234.sh: sudo: not found
==> docker: killing the contaner: 34234hashvomit234234
Build 'docker' errored: Scipt exited with non-zero exit status: 127

有问题的脚本不是我的脚本之一。这是一些随机生成的脚本,每次构建时,该脚本都有一系列不同的四个数字。我是Packer和Docker的新手,所以问题可能很明显,但对我而言并非如此。

最佳答案

您的打包程序输入似乎有一些问题。由于您尚未包含完整的输入文件,因此很难说,但请注意以下几点:

  • 您可能需要在调用apt-get update之前运行apt-get install sudo。否则,即使镜像已缓存程序包元数据,它也可能是过时的。如果我尝试使用您的输入构建图像,它将失败并显示以下内容:
    E: Unable to locate package sudo
  • 尽管在这种情况下不是问题,但最好以非交互方式在-y命令行上显式包含apt-get:

    apt-get -y安装sudo

    在将apt-get附加到终端的情况下,这将阻止其提示进行确认。这不是您输入内容的必要更改,但我认为明确表示好。
  • 基于the docs和我的测试,您不能在docker builder的RUN块中包含changes语句。失败与:
    Stderr: Error response from daemon: run is not a valid change command

    幸运的是,我们可以将pip install命令移到shell设置程序中。

  • 进行这些更改后,以下输入将成功构建镜像:
    {
    "builders": [{
    "type": "docker",
    "image": "python:3",
    "commit": true
    }],

    "provisioners": [{
    "type": "shell",
    "inline": [
    "apt-get update",
    "apt-get -y install sudo",
    "pip install Flask"
    ]
    }],

    "post-processors": [[ {
    "type": "docker-tag",
    "repository": "packer-test",
    "tag": "latest"
    } ]]
    }

    ( NB :使用Packer v1.3.5测试)

    关于docker - Packer尽管存在sudo,但我的docker构建失败并出现错误 “sudo: not found”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55643639/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com