在dockerfile中使用多个命令

在dockerfile中使用多个命令,docker,dockerfile,Docker,Dockerfile,我的Dockerfile内容如下: FROM amd64/ubuntu:xenial-20180726 ARG GETH_REPO="https://github.com/ethereum/go-ethereum" ARG GETH_VERSION="v1.8.12" CMD ["/bin/bash", "-c", "git clone ${GETH_REPO} && \ cd go-ethereum && \ git fe

我的Dockerfile内容如下:

FROM amd64/ubuntu:xenial-20180726

ARG GETH_REPO="https://github.com/ethereum/go-ethereum"
ARG GETH_VERSION="v1.8.12"


CMD ["/bin/bash", "-c", "git clone ${GETH_REPO} && \ 
        cd go-ethereum && \
        git fetch origin ${GETH_VERSION} && \
        git checkout ${GETH_VERSION} && \
        make geth && \
        touch /var/log/geth_log"]
基本上,我想从存储库下载并构建。 但是,当我运行创建的映像时,会出现以下错误

$ docker run -it <imageid>
/bin/sh: 1: [/bin/bash,: not found
$docker运行-it
/bin/sh:1:[/bin/bash,:未找到
我已经确保可以通过登录到正在运行的容器来执行这些操作


我遗漏了什么吗?

您的json语法无效,因此docker将它作为带shell的字符串运行,而不是执行它。您的命令中没有需要bash的内容,因此您可以使用默认的/bin/sh字符串语法:

FROM amd64/ubuntu:xenial-20180726

ARG GETH_REPO="https://github.com/ethereum/go-ethereum"
ARG GETH_VERSION="v1.8.12"

RUN git clone ${GETH_REPO} && \ 
        cd go-ethereum && \
        git fetch origin ${GETH_VERSION} && \
        git checkout ${GETH_VERSION} && \
        make geth && \
        touch /var/log/geth_log

请注意,您的所有步骤都是作为容器的默认启动命令运行的,而不是在生成时执行的。您可能希望将CMD替换为run。

我尝试了此操作,但出现以下错误:“$docker run-it 19bd08d6fa2d您必须指定要克隆的存储库。用法:git clone[][--][]`是否需要在运行期间提供
GETH_REPO
的值?(提供的默认值)生成参数仅在生成时应用。您希望这些命令在生成映像时运行,还是在每次创建容器时的运行时运行?