当前位置: 首页 > 知识库问答 >
问题:

Docker撰写卷不会将文件持久保存在子文件夹中

焦正德
2023-03-14

我有以下docker撰写。yml公司

version: '2'

services:
  web:
    image: user-service-web:${WEB_IMAGE_VER}
    depends_on:
      - db
    environment:
      NODE_ENV: ${NODE_ENV}
    networks:
      user-service:
        aliases:
          - user-service-web
    ports:
      - "80:3000"
    restart: always
  db:
    image: user-service-mongodb:latest
    networks:
      viewster-user-service:
        aliases:
          - user-service-mongodb
    ports:
      - "27017:27017"
    restart: always
    volumes:
      - mongodb:/data/
networks:
  user-service:
    driver: bridge
volumes:
  mongodb:

当我运行docker compose up时,它会创建指定的卷mongodb,并启动所有需要的容器。但让我困惑的是,卷文件夹有两个空文件夹:configdb和db,但里面没有数据文件。当我删除db容器时,预期会导致数据丢失。

我尝试连接到db容器并在文件夹和db文件夹中手动创建文件,只有在文件夹中创建的文件出现在主机卷文件夹中。docker似乎只能在“卷设置”中指定的文件夹中创建文件或文件夹,但无法在子文件夹中创建文件。我可能错了。要为每个需要持久化的文件夹创建卷是很困难的。有没有办法为我的案例正确配置卷?

环境:描述:Ubuntu 14.04.3 LTS版本:14.04代码名:trusty

Docker版本:客户端:版本:1.11.2 API版本:1.23 Go版本:go1.5.4 Git提交:b9f10c9构建:Wed Jun 1 21:47:50 2016 OS/Arch:linux/amd64

服务器:版本:1.11.2 API版本:1.23 Go版本:go1.5.4 Git提交:b9f10c9构建:Wed Jun 1 21:47:50 2016 OS/Arch:linux/amd64

Docker Compose version docker-compose version 1.7.1, build 0a9ab35 docker-py version: 1.8.1 CPython version: 2.7.9 OpenSSL version: OpenSSL 1.0.1e 2013年2月11日


共有1个答案

吕嘉赐
2023-03-14

您创建的mongoDB是一个命名卷,而不是主机卷,因此它与主机文件没有连接。命名卷将位于docker内部目录中。当将空卷与容器一起使用时,它将在该位置接收映像卷内容的副本。如果您运行docker-compose down-v,它也将被删除。

如果您想要一个主机卷,您需要在db服务下切换到此行:

volumes:
  - ./data:/data

这将在文件夹内使用/创建一个数据文件夹,在该文件夹中运行docker compose up命令,该命令是装载在容器中/数据的主机卷。

更新:

作为命名卷持久化数据的证据,这里有一个简单的示例:

bash$ cat docker-compose.yml 
version: '2'

volumes:
  testvol:
    driver: local

services:
  testapp:
    image: busybox
    entrypoint: "top"
    volumes:
      - testvol:/data

bash$ ../bin/docker-compose up -d
Creating network "test_default" with the default driver
Creating volume "test_testvol" with local driver
Creating test_testapp_1
bash$ ../bin/docker-compose exec testapp /bin/sh
/ # find /data
/data
/ # mkdir /data/sub
/ # touch /data/a
/ # touch /data/sub/b
/ # find /data
/data
/data/sub
/data/sub/b
/data/a
/ # exit
bash$ ../bin/docker-compose down
Stopping test_testapp_1 ... done
Removing test_testapp_1 ... done
Removing network test_default
bash$ ../bin/docker-compose up -d
Creating network "test_default" with the default driver
Creating test_testapp_1
bash$ ../bin/docker-compose exec testapp /bin/sh
/ # find /data
/data
/data/sub
/data/sub/b
/data/a
/ # exit
 类似资料:
  • 问题内容: 当我涉及此示例撰写文件时,我正在设置一些培训材料: https://github.com/dockersamples/example-voting-app/blob/master/docker- compose.yml 而且我找不到文件的第48和49行上如何安装该卷: 有人可以向我解释主机上的该卷在哪里吗?找不到它,我不希望在容器消失后保持任何postgresql数据悬挂。网络发生了类

  • 问题内容: 我需要将文件写入以下路径: 但是路径可能不存在。所以我得到以下错误: message = ENOENT,打开/folder1/folder2/file.txt 如何将内容写入该路径? 问题答案: 将mkdirp与first 结合使用。 如果整个路径已经存在,则为noop。否则,它将为您创建所有丢失的目录。 该模块可满足您的需求:https : //npmjs.org/package/w

  • 我的应用程序将一些文件保存到设备上的数据/数据文件夹中。保存远程文件后,我会处理这些文件,并将它们复制到其他文件夹中。在之前测试过的所有设备上,All都能正常工作,但在galaxy s3上会生成空指针异常。似乎我不被允许在那个文件夹上写或处理文件!但只有新的星系s3!我也无法使用EclipseDDMS文件浏览器在数据文件夹中找到任何文件,而在模拟器(相同的android版本)中,我可以正确查看所有

  • 问题内容: 我将创建一个或多或少具有以下形式的结构: 我想将这些值写入文件并在后续调用中读取它们。我最初的计划是将它们读入映射并使用键(路径)查找值(哈希和LastModified)。Go中有一种巧妙的方法吗? 如果没有,您可以推荐哪种文件格式?我已经阅读并尝试了先前项目中的一些键/值文件存储,但并未使用Go进行试验。现在,我的要求可能非常简单,因此大型数据库服务器系统会显得过大。我只想要我可以快

  • 在Apache Camel上工作时,每当使用camel-zip压缩文件或通过canel-ftp复制文件时,Camel会将文件移动到.Camel文件夹中,并在处理后不将其保留在源文件夹中。我希望我的文件在处理完成后留在源文件夹中。请建议如何实现相同的。 CamelContext context=new DefaultCamelContext();context.addRoutes(new Route

  • 我有个问题。 有一个自定义mvc结构,当它是根文件夹时,一切都通过.htaccess中的RewriteRule工作,但如果我将它设置为子文件夹,它将停止工作。 .htaccess是 重写引擎在 重写条件%{REQUEST_FILENAME}-重写cond%{REQUEST_FILENAME}-d RewriteRule^(.*)$index.php?route=$1[L,QSA] AddDefau