docker - 使用 Docker Compose 的未定义卷
问题描述
我想将此 docker CLI 命令(来自smallstep/step-ca)转换为 docker-compose.yml 文件以运行docker compose
(版本 2):
docker run -d -v step:/home/step \
-p 9000:9000 \
-e "DOCKER_STEPCA_INIT_NAME=Smallstep" \
-e "DOCKER_STEPCA_INIT_DNS_NAMES=localhost,$(hostname -f)" \
smallstep/step-ca
此命令成功启动容器。
这是我“撰写”的撰写文件:
version: "3.9"
services:
ca:
image: smallstep/step-ca
volumes:
- "step:/home/step"
environment:
- DOCKER_STEPCA_INIT_NAME=Smallstep
- DOCKER_STEPCA_INIT_DNS_NAMES=localhost,ubuntu
ports:
- "9000:9000"
当我运行时docker compose up
(再次,在这里使用 v2),我得到这个错误:
服务“ca”指的是未定义的卷步骤:无效的撰写项目
这是解决这个问题的正确方法吗?我想我错过了在 docker compose 项目中创建卷的额外步骤,但我不确定那会是什么,或者这是否是一个有效的用例。
解决方案
Compose 文件也有一个顶级volumes:
块,您需要在那里声明卷。
version: '3.9'
services:
ca:
volumes:
- "step:/home/step"
et: cetera
volumes: # add this section
step: # does not need anything underneath this
可能还有其他选项,但您通常不需要指定这些,除非您需要重用预先存在的 Docker 命名卷或您需要非标准 Linux 挂载选项(链接文档提供了 NFS 挂载卷的示例,例如)。
推荐阅读
- r - 使用来自另一个 xts 对象的数据更新一个 xts 时间序列对象
- c# - Unity - 拖动停止后继续物体惯性?
- hyperledger-fabric - 如果使用 docker swarm 部署网络,如何确保超级账本结构中的数据持久性?
- javascript - 如何计算来自多个嵌套对象的特定值的对象数量?
- python - 在pyglet中设置鼠标光标
- reactjs - Auth0 登录演示在刷新时返回 400 并将我注销
- mysql - MYSQL 使用 group by 返回给定比较的日期输出
- mysql - 将外键列添加到现有表
- android - 启动android studio emulator 4.0.3(API 15)时出现黑屏
- java - 如何从适配器向列表视图添加两个按钮?