我想将此 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 规范:
为了避免命名卷出现歧义,相对路径应始终以
或.
开头。..
因此,使您的
VOLUME
的主机路径相对应就足够了:
services:
ca:
volumes:
- ./step:/home/step
如果您不打算与其他容器共享
step
卷,则无需在顶级 volumes
键中定义它:
如果挂载是主机路径并且仅由单个服务使用,则可以将其声明为服务定义的一部分,而不是顶级
键。volumes
docker-compose 似乎不知道您通过命令创建的“卷”:
sudo docker volume create my_xx_volume
所以,只需手动
mkdir
创建一个文件夹和chmod 777 <my_folder>
,那么你的mysql docker就会很好地使用它。
(在生产环境中,不要使用
chmod
而是使用 chown
来更改文件权限)