使用 Vagrant 和 Docker 提供程序构建 Docker 文件:多行命令链接 returns 错误
Building a Dockerfile with Vagrant and the Docker provider: multi-line command chaining returns error
我正在 运行ning 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 post 中提出的指南优化 Docker,但我无法在多行上链接命令。为了便于阅读,我想避免在同一行上链接命令,所以我的 Docker 文件看起来像这样:
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 提供者构建时我不能将命令拆分成多行有什么想法吗?
附录
我的很多困惑源于在使用 /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
我正在 运行ning 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 post 中提出的指南优化 Docker,但我无法在多行上链接命令。为了便于阅读,我想避免在同一行上链接命令,所以我的 Docker 文件看起来像这样:
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 提供者构建时我不能将命令拆分成多行有什么想法吗?
附录
我的很多困惑源于在使用 /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