在docker中,我想这样做:

git clone XYZ
cd XYZ
make XYZ

然而,因为没有cd命令,我每次都必须传入完整路径(使XYZ /fullpath)。对此有什么好的解决方案吗?


当前回答

如果你想在运行docker镜像时改变容器的工作目录,你可以使用-w(——workdir的缩写)选项:

docker run -it -w /some/valid/directory/inside/docker {image-name}

Ref:

Docker运行选项:https://docs.docker.com/engine/reference/commandline/run/#options

其他回答

您可以运行一个脚本,或一个更复杂的参数到run。下面是我之前下载的Dockerfile中的一个例子:

RUN cd /opt && unzip treeio.zip && mv treeio-master treeio && \
    rm -f treeio.zip && cd treeio && pip install -r requirements.pip

由于使用了'&&',如果前面的所有命令都成功执行,它只会到达最后的'pip install'命令。

事实上,因为每次RUN都会创建一个新的commit &(目前)一个AUFS层,如果你在Dockerfile中有太多的命令,你会用完限制,所以合并RUN(当文件稳定时)是一件非常有用的事情。

您可以对所有这些使用一个RUN命令

RUN git clone XYZ && \
    cd XYZ && \
    make XYZ

如果你想在运行docker镜像时改变容器的工作目录,你可以使用-w(——workdir的缩写)选项:

docker run -it -w /some/valid/directory/inside/docker {image-name}

Ref:

Docker运行选项:https://docs.docker.com/engine/reference/commandline/run/#options

我想知道如果两次WORKDIR将工作与否,但它工作了:)

FROM ubuntu:18.04

RUN apt-get update && \
    apt-get install -y python3.6

WORKDIR /usr/src

COPY ./ ./

WORKDIR /usr/src/src

CMD ["python3", "app.py"]

要更改到另一个目录,请使用WORKDIR。WORKDIR之后的所有RUN、CMD和ENTRYPOINT命令都将从该目录执行。

RUN git clone XYZ 
WORKDIR "/XYZ"
RUN make