【问题标题】:Error on building Dockerfile to Image将 Dockerfile 构建到映像时出错
【发布时间】:2018-08-05 06:35:38
【问题描述】:

我有以下 Dockerfile。我正在尝试将其构建为图像,但不知何故我收到以下错误:ADD service /container/service 添加失败:stat /mnt/sda1/var/lib/docker/tmp/docker-builder005872257/service:在步骤 6/9 没有这样的文件或目录。我不知道为什么...有人可以帮帮我吗?

FROM osixia/light-baseimage:1.1.1
ARG LDAP_OPENLDAP_GID
ARG LDAP_OPENLDAP_UID

RUN if [ -z "${LDAP_OPENLDAP_GID}" ];  then groupadd -r openldap; else groupadd -r -g ${LDAP_OPENLDAP_GID} openldap; fi && if [ -z "${LDAP_OPENLDAP_UID}" ]; then useradd -r -g openldap openldap; else useradd -r -g openldap -u ${LDAP_OPENLDAP_UID} openldap; fi

RUN echo "path-include /usr/share/doc/krb5*" >> /etc/dpkg/dpkg.cfg.d/docker && apt-get -y update && /container/tool/add-service-available :ssl-tools \
        && LC_ALL=C DEBIAN_FRONTEND=noninteractive apt-get install -y --no-install-recommends \
ldap-utils \
libsasl2-modules \
libsasl2-modules-db \
libsasl2-modules-gssapi-mit \
libsasl2-modules-ldap \
libsasl2-modules-otp \
libsasl2-modules-sql \
openssl \
slapd \
krb5-kdc-ldap \
&& apt-get clean \
&& rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ADD service /container/service
RUN /container/tool/install-service
ADD environment /container/environment/99-default
EXPOSE 389 636

编辑

在 Dockerfile 中添加一些 ls 命令后,我在日志中看到以下行:

Step 6/11 : RUN ls /container/
 ---> Running in 623dca399324
environment
service
service-available
tool
Removing intermediate container 623dca399324

 ---> 5f7fcb8a1857

Step 7/11 : RUN ls
 ---> Running in 7f3bd8662113
bin
boot
container
dev
etc
home
lib
lib64
media
mnt
opt
proc
root
run
sbin
srv
sys
tmp
usr
var
Removing intermediate container 7f3bd8662113

     ---> 99c17cefc572
Step 8/11 : ADD service /container/service
ADD failed: stat /mnt/sda1/var/lib/docker/tmp/docker-builder200387466/service: no such file or directory

知道如何解决这个问题吗?

【问题讨论】:

  • 尝试删除或修改您的.dockerignore 文件。它有时会引发此错误,因为它忽略了在某些情况下构建 Docker 文件所需的目录。

标签: docker dockerfile


【解决方案1】:

它在我的本地机器上成功构建。您可以删除相应的文件或目录并尝试一次。另外,检查权限。您是否配置了不允许添加这些文件的.dockerignore。或者尝试使用 -f 或 --file 命令运行,例如,

$ docker build . -f Dockerfile

希望这会有所帮助。

【讨论】:

  • 不幸的是,这对我不起作用。我应该如何配置 .dockerignore 文件?
  • @DinaBogdan:检查这个线程,stackoverflow.com/questions/25490911/… 但是,你不必创建这个......我认为,问题仍然在于各个文件(在构建)...
【解决方案2】:

这个错误意味着它can't find the directory 这意味着它可能不存在或者你做错了。

您可以做的其中一件事是创建目录并向其添加服务。下面是一个可以教或帮助你的 sn-p 解释:

RUN mkdir /container/

然后将服务添加到您创建的目录。因此

ADD service /container/service

这只能作为帮助您进行跟踪的方法。不过我会建议@mohan08p 回答上面的问题,因为这对我有用。

【讨论】:

  • 我尝试在将服务添加到容器之前一步创建容器文件夹,但日志中的错误消息说容器文件夹已经存在。不知何故,在删除 mkdir /container/ 行之后,我又运行了一次构建,我在将服务添加到容器文件夹之前看到了这一点,conainter 它被删除了,我收到了消息:删除中间容器 7f3bd8662113。知道为什么吗?
  • @DinaBogdan Dockerfile 中的路径始终与上下文目录相关。所以我认为如果上下文目录中没有./container,那么这是预期的行为。尝试将其更改为ADD service ./container/service,看看它是否运行成功,以便我们更新答案。
  • 另外,使用 @mohan08p 使用 docker build . -f Dockerfiledocker build . -f path/to/Dockerfile 建议的使用 -f--file 标志指定 Dockerfile 也应该可以工作。
  • 还要检查您尝试添加到的目录是否在源代码的.dockerignore 文件中未被忽略。
  • 我尝试使用 -f 或 --file 运行命令,但没有成功。我会尝试其他人的建议。谢谢
猜你喜欢
  • 2018-04-23
  • 2020-10-17
  • 1970-01-01
  • 2020-07-18
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多