Построение файла Dockerfile с помощью Vagrant и поставщика Docker: многострочная цепочка команд возвращает ошибку


Я запускаю 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

Я оптимизировал 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

Есть идеи, почему я не могу разбить команды на несколько строк при построении от поставщика docker vagrant?

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.

1 2

1 ответ:

Это недопустимый синтаксис:

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