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

我正在运行Vagrant 1.7.2,通过docker提供程序构buildDocker镜像。 我的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 

我正在使用这篇文章中提出的指导方针来优化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 

任何想法,为什么我无法分stream命令时从stream浪者的docker提供商build设从多行?

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语法,实际上“&&”语法将sh命令链接在多行上,“&&”在/ bin / bash中不是有效的语法。

这是无效的语法:

 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