无法通过 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
...假设您想继续 运行 您刚刚克隆的目录中的一些命令。
我正在创建 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
...假设您想继续 运行 您刚刚克隆的目录中的一些命令。