【问题标题】:Why Dockerfile builds but is not working correctly, even though it works manually?为什么 Dockerfile 构建但不能正常工作,即使它是手动工作的?
【发布时间】:2020-08-18 21:05:16
【问题描述】:

我已经尝试了很多小时。我一直在寻找 docker docs、github repos 和其他东西,但由于某种原因我无法让它工作。

我的码头文件:

FROM mattrayner/lamp:latest-1804

WORKDIR /app
RUN  wget -O /tmp/lwt.zip http://downloads.sourceforge.net/project/lwt/lwt_v_1_6_3.zip && \
     yes A | unzip /tmp/lwt.zip &&\
     rm /tmp/lwt.zip &&\
     mv connect_xampp.inc.php connect.inc.php
EXPOSE 80

CMD ["/run.sh"]

它正常构建,没有任何错误,但是当我运行图像时,/app 目录中没有出现任何内容,我的浏览器上只有一个基本的Welcome to LAMP视图。

虽然,

如果我这样做docker run -p "80:80" -it -v ${PWD}/app:/app mattrayner/lamp:latest-1804 /bin/bashcd /app,请复制并粘贴

wget -O /tmp/lwt.zip http://downloads.sourceforge.net/project/lwt/lwt_v_1_6_3.zip && \
     yes A | unzip /tmp/lwt.zip &&\
     rm /tmp/lwt.zip &&\
     mv connect_xampp.inc.php connect.inc.php

如果我退出并运行相同的docker run 命令,它仍然不起作用但是

Docker LAMP 指令还声明完全按照我所做的那样做:

FROM mattrayner/lamp:latest-1804

# Your custom commands

CMD ["/run.sh"]

当我按照这些说明进行操作时,我认为一切都会顺利进行。

这里有什么问题?它可能与中间容器有关,但我无法理解(我不是开发人员或开发人员,只是一个业余爱好者)。

【问题讨论】:

  • 请标记为已解决,不仅投赞成票 :) 非常感谢:D

标签: docker dockerfile docker-volume


【解决方案1】:

发生这种情况是因为您正在这样做:

  1. 在 docker 映像的 /app 目录中下载文件 (wget ...)。
  2. 之后,当您挂载卷时,您将使用 $PWD/app 的内容覆盖此 /app 目录。

如果您要在某些目录中安装 docker build 的内容,请不要安装到同一路径中。

如果您需要相同路径中的内容,您可以挂载一些具体文件,但不能挂载整个目录,否则它将覆盖您在创建容器时在 docker 映像中拥有的内容。

你可以在其他地方做 wget 或者下载到你的 ${PWD}/app 然后挂载它。

【讨论】:

  • 除了这个好的答案,您还可以使用unzip /tmp/lwt.zip -d "/app/ 指定解压缩的目的地。您基本上是在 tmp 中获取文件,然后删除 tmp 目录。
  • 据我了解,我必须在运行时将数据放入 /app 而不是构建时?在我的情况下我是怎么做的?不过感谢您的回答。
  • 你可以同时做这两件事,但是如果你把数据放在构建时和运行时,注意并在运行时只挂载你需要的文件,而不是所有卷/app,以避免不必要的覆盖。
猜你喜欢
  • 2017-08-11
  • 1970-01-01
  • 2018-05-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-09-01
  • 1970-01-01
  • 2019-11-21
相关资源
最近更新 更多