首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker ADD不复制子文件夹的内容。

Docker ADD不复制子文件夹的内容。
EN

Stack Overflow用户
提问于 2019-09-10 17:33:54
回答 1查看 438关注 0票数 1

在构建开发环境(LinuxMint18.3)时,我必须创建一个包含以下说明的docker文件:

代码语言:javascript
复制
FROM centos:7

ENV CATALINA_HOME /opt/tomcat
ADD apache-tomcat-8.5.5 ${CATALINA_HOME}

其中apache-tomcat-8.5.5是一个文件夹,其中包含所有要部署tomcat-8.5.5的文件,这些文件可以从以下位置获得:

代码语言:javascript
复制
https://archive.apache.org/dist/tomcat/tomcat-8/v8.5.5/bin/apache-tomcat-8.5.5.tar.gz

添加除~/apache-tomcat-8.5.5/webapp/中的内容以外的所有文件副本。有人也有类似的问题吗?我甚至将权限更改为RW,但问题仍然存在。

我运行这个码头使用

代码语言:javascript
复制
docker run -v /opt/webapi/tomcat/webapps:/opt/tomcat/webapps -v /opt/webapi/tomcat/logs:/opt/tomcat/logs  .....

这种共享会不会是删除网络应用程序中的内容?如果是这样,我们怎样才能避免这种情况呢?我没有任何码头文件

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-10 18:00:01

我运行这个码头使用 码头运行-v -v -v/opt/webapi/tomcat/log:/opt/tomcat/log.

您可以覆盖webapps目录,并将主机挂载到/opt/webapi/tomcat/webapps。只有主机上该目录中的文件才能在该容器中看到。这些文件很可能被复制到映像中,但是有了这个卷挂载,图像中的文件就看不到了。

如果不希望用此主机目录替换容器中的目录,则不要创建卷挂载。如果要用图像中的内容覆盖主机目录,可以在入口点执行此操作,或者切换到指定的卷。当命名卷为空时,将初始化它,并且可以指向主机上的任何文件夹,并将选项传递给卷驱动程序。下面是几个命名绑定挂载的示例:

代码语言:javascript
复制
  # create the volume in advance
  $ docker volume create --driver local \
      --opt type=none \
      --opt device=/home/user/test \
      --opt o=bind \
      test_vol

  # create on the fly with --mount
  $ docker run -it --rm \
    --mount type=volume,dst=/container/path,volume-driver=local,volume-opt=type=none,volume-opt=o=bind,volume-opt=device=/home/user/test \
    foo

  # inside a docker-compose file
  ...
  volumes:
    bind-test:
      driver: local
      driver_opts:
        type: none
        o: bind
        device: /home/user/test
  ...

要在入口点中复制文件,请参阅我的save-volumeload-volume脚本。这将使您可以灵活地始终用图像中保存的值覆盖主机上的内容。尽管这样做,请考虑是否确实需要卷,以及如何通过覆盖用户更改来避免数据丢失。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57875781

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档