配置Docker Compose的tmpfs卷出错,将指定docker run命令转为Compose配置
解决Docker Compose中tmpfs卷的配置错误问题
我来帮你排查这个tmpfs配置的问题~首先看你原来的docker run命令里,--tmpfs /dev/shm:rw,nosuid,nodev,exec这个参数在Compose里的写法和你当前的配置有几个关键错误,我先给你修正后的完整配置,再解释问题出在哪:
修正后的Docker Compose配置(推荐写法)
version: "3" services: centos-testing: image: centos:7 privileged: true tty: true stdin_open: true ulimits: nproc: 655353 nofile: soft: 20000 hard: 40000 cap_add: - SYS_PTRACE - SYS_ADMIN # 直接用tmpfs字段对应docker run的--tmpfs参数 tmpfs: - /dev/shm:rw,nosuid,nodev,exec
你原来配置的错误点解析
- 多余的
source字段:tmpfs是临时内存文件系统,不需要关联宿主机的源路径,你原来写的source: /dev/shm完全没必要,反而会导致配置错误。 - target路径错误带参数:
target只需要指定容器内的挂载路径(也就是/dev/shm),不能把挂载参数(rw,nosuid,nodev...)跟在后面,这些参数需要和路径一起放在tmpfs的条目里,或者用长格式单独配置。 - 没必要硬套volumes长格式:Compose专门提供了
tmpfs顶级配置项(在service节点下),完全对应docker run的--tmpfs参数,写法更简洁直观,比硬套volumes长格式更不容易出错。
另外补充一下:你原来docker run里的-v /dev/shm其实会被--tmpfs /dev/shm覆盖,所以在Compose里只需要保留tmpfs的配置即可,不需要额外挂载宿主机的/dev/shm。
用上面修正后的配置运行docker-compose up -d,容器应该就能正常启动,并且/dev/shm会以你指定的参数挂载为tmpfs文件系统啦。
内容的提问来源于stack exchange,提问作者ealeon
相关产品推荐
相关产品推荐

