使用Vagrant和Docker提供程序构建Dockerfile:多行命令链接返回错误

时间:2015-04-27 19:50:28

标签: docker vagrant boot2docker

我正在运行Vagrant 1.7.2,通过docker提供程序构建Docker镜像。我的Vagrantfile看起来像这样:

# -*- mode: ruby -*-                                                                                  
# vi: set ft=ruby :                                                                                   

Vagrant.configure(2) do |config|
  config.vm.provider "docker" do |d|
    d.build_dir = "."
    d.force_host_vm = true
  end
end

我正在使用this帖子中提出的指南优化Docker,但我无法在多行上链接命令。为了便于阅读,我想避免在同一行上链接命令,所以我的Dockerfile看起来像这样:

FROM ubuntu:14.04

RUN sudo apt-get update &&
sudo apt-get -yf install &&
sudo apt-get install -y wget &&
sudo apt-get install -y git

然而,当我运行'vagrant up --provider = docker'时,我最终得到以下错误:

The command [/bin/sh -c sudo apt-get update &&] returned a non-zero code: 2

...

Step 2 : RUN sudo apt-get update &&
 ---> Running in 12d3f807a90d
/bin/sh: 1: Syntax error: end of file unexpected

有关为什么在使用vagrant的docker提供程序构建时无法将命令分割为多行的任何想法?

Annendum

我的很多困惑源于使用/ bin / sh和/ bin / bash之间切换来运行命令。

命令

RUN ["/bin/bash", "-c", "sudo apt-get update && \
     sudo apt-et-yf install && \
     sudo apt-get install -y wget"]

是bash的无效语法。我正在改变/ bin / sh语法和/ bin / bash语法,实际上“&& \”语法链多条线上的命令和“&&&” / bin / bash中的语法无效。

1 个答案:

答案 0 :(得分:2)

这是无效的语法:

RUN sudo apt-get update &&
sudo apt-get -yf install &&
sudo apt-get install -y wget &&
sudo apt-get install -y git

如果要跨多行扩展Dockerfile命令,则需要反斜杠 - 转义每行的结尾才能继续:

RUN sudo apt-get update && \
sudo apt-get -yf install && \
sudo apt-get install -y wget && \
sudo apt-get install -y git

除了第一行之外,我还要缩小所有链条以使链条显而易见:

RUN sudo apt-get update && \
    sudo apt-get -yf install && \
    sudo apt-get install -y wget && \
    sudo apt-get install -y git