Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Packer使我的docker构建失败,出现错误;sudo:notfound";尽管sudo在场_Docker_Packer - Fatal编程技术网

Packer使我的docker构建失败,出现错误;sudo:notfound";尽管sudo在场

Packer使我的docker构建失败,出现错误;sudo:notfound";尽管sudo在场,docker,packer,Docker,Packer,我正试图建立一个与docker对它的包装器图像,我希望docker创建一个自定义脚本docker图像。我的代码的相关部分是(请注意,顶级构建器会仔细检查是否安装了sudo): 我的屏幕输出的相关部分是: ==> docker: provisioning with shell script: /var/folders/s8/g1_gobbldygook/T/packer-shell23453453245 docker: /temp/script_1234.sh: 3: /tmp/sc

我正试图建立一个与docker对它的包装器图像,我希望docker创建一个自定义脚本docker图像。我的代码的相关部分是(请注意,顶级构建器会仔细检查是否安装了sudo):

我的屏幕输出的相关部分是:

==> 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都是新手,所以问题可能很明显,但对我来说并非如此。

您的packer输入似乎有一些问题。由于您没有包含完整的输入文件,很难说清楚,但请注意以下几点:

  • 在调用
    apt get install sudo
    之前,您可能需要运行
    apt get update
    。否则,即使映像缓存了包元数据,它也可能会过时。如果我尝试使用您的输入构建映像,则会失败,原因是:

    E: Unable to locate package sudo
    
    Stderr: Error response from daemon: run is not a valid change command
    
  • 虽然在这种情况下不是问题,但在以非交互方式运行时,最好在
    apt get
    命令行上显式包含
    -y

    apt get-y安装sudo

    apt get
    连接到终端的情况下,这将阻止其提示确认。这并不是对您的输入进行必要的更改,但我认为明确一点是好的

  • 根据我的测试,您不能在docker builder的
    changes
    块中包含
    RUN
    语句。这在以下方面失败:

    E: Unable to locate package sudo
    
    Stderr: Error response from daemon: run is not a valid change command
    
    幸运的是,我们可以将
    pip install
    命令移动到
    shell
    provisioner中

  • 通过这些更改,以下输入将成功构建映像:

    {
        "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进行测试)

    您的Packer输入似乎有一些问题。由于您没有包含完整的输入文件,很难说清楚,但请注意以下几点:

  • 在调用
    apt get install sudo
    之前,您可能需要运行
    apt get update
    。否则,即使映像缓存了包元数据,它也可能会过时。如果我尝试使用您的输入构建映像,则会失败,原因是:

    E: Unable to locate package sudo
    
    Stderr: Error response from daemon: run is not a valid change command
    
  • 虽然在这种情况下不是问题,但在以非交互方式运行时,最好在
    apt get
    命令行上显式包含
    -y

    apt get-y安装sudo

    apt get
    连接到终端的情况下,这将阻止其提示确认。这并不是对您的输入进行必要的更改,但我认为明确一点是好的

  • 根据我的测试,您不能在docker builder的
    changes
    块中包含
    RUN
    语句。这在以下方面失败:

    E: Unable to locate package sudo
    
    Stderr: Error response from daemon: run is not a valid change command
    
    幸运的是,我们可以将
    pip install
    命令移动到
    shell
    provisioner中

  • 通过这些更改,以下输入将成功构建映像:

    {
        "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:使用封隔器v1.3.5进行测试)