无法通过 Dockerfile 将 cd 复制到克隆的 repo

Cant cd to cloned repo via Dockerfile

我正在创建 Dockerfile,但在导航到克隆存储库的文件夹时似乎遇到了一些问题

我的文件包含以下内容

FROM ubuntu:latest
MAINTAINER cagnulein

ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Europe/Moscow
ENV MAKEFLAGS -j8
WORKDIR /usr/local/src

RUN apt-get update && apt-get install -y tzdata
RUN apt -y update
RUN apt -y upgrade
RUN apt update -y && apt-get install -y git qt5-default libqt5bluetooth5 libqt5widgets5 libqt5positioning5 libqt5xml5 qtconnectivity5-dev qtpositioning5-dev libqt5charts5-dev libqt5charts5 qt5-default libqt5networkauth5-dev libqt5websockets5* libxcb-randr0-dev libxcb-xtest0-dev libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev build-essential
RUN cd ~
RUN git clone https://github.com/cagnulein/qdomyos-zwift.git
RUN ls -alh
RUN cd ~/qdomyos-zwift

我成功克隆了存储库,并且可以确认该文件夹存在,但我似乎无法导航到它,因为我得到以下信息

#13 [ 9/15] RUN ls -alh
#13 sha256:4b5dfb1969e228b79ed0f0d06393eddbc97c0197582b068ad75b1e5672597867
#13 0.361 total 16K
#13 0.361 drwxr-xr-x  1 root root 4.0K Mar 30 20:31 .
#13 0.361 drwxr-xr-x  1 root root 4.0K Mar 16 20:07 ..
#13 0.361 drwxr-xr-x 17 root root 4.0K Mar 30 20:31 qdomyos-zwift
#13 DONE 0.4s

#14 [10/15] RUN cd ~/qdomyos-zwift
#14 sha256:c875dc5e19a73f6e654af2feb63f14be8a945e8eefe4882f4cd64962dd90d399
#14 0.437 /bin/sh: 1: cd: can't cd to /root/qdomyos-zwift
#14 ERROR: executor failed running [/bin/sh -c cd ~/qdomyos-zwift]: exit code: 2

有什么想法吗?


尝试过

WORKDIR ~
RUN git clone https://github.com/cagnulein/qdomyos-zwift.git
RUN ls -alh
WORKDIR ~/domyos-zwift
RUN git submodule update --init src/smtpclient/

失败

#13 0.466 fatal: not a git repository (or any of the parent directories): .git
#13 ERROR: executor failed running [/bin/sh -c git submodule update --init src/smtpclient/]: exit code: 128
------
 > [11/15] RUN git submodule update --init src/smtpclient/:
------
executor failed running [/bin/sh -c git submodule update --init src/smtpclient/]: exit code: 128

~$HOME 的 shorthand,用户的主目录。在这种情况下,这是 /root。但是正如您的 ls 命令所示,存储库的目录位于当前目录中。如果您执行 pwd,您将看到当前目录不是 /root。而是执行 cd qdomyos-zwift 以便它相对于当前目录。

请注意,在您的示例中,您已经看到了设置当前目录的机制:WORKDIR

将所有 RUN cd ... 语句替换为 WORKDIR /path。这是在 Dockerfile 中设置当前目录的正确方法。

如果您需要在构建结束时位于其他位置,请记住在文件末尾添加一个 WORKDIR 以将其保留为最终映像中的工作目录。

您的 cd 操作看起来很混乱而且完全没有必要。可能会尝试一些类似

的方法
WORKDIR /usr/local/src

RUN apt-get update && apt-get install -y tzdata
# RUN apt -y update  # no need, you just did
RUN apt -y upgrade
# RUN apt update -y &&  # no need, you just did
RUN apt-get install -y git qt5-default libqt5bluetooth5 \
     libqt5widgets5 libqt5positioning5 libqt5xml5 \
     qtconnectivity5-dev qtpositioning5-dev libqt5charts5-dev \
     libqt5charts5 qt5-default libqt5networkauth5-dev \
     libqt5websockets5* libxcb-randr0-dev libxcb-xtest0-dev \
     libxcb-xinerama0-dev libxcb-shape0-dev libxcb-xkb-dev \
     build-essential
RUN git clone https://github.com/cagnulein/qdomyos-zwift.git
WORKDIR /usr/local/src/qdomyos-zwift

...假设您想继续 运行 您刚刚克隆的目录中的一些命令。