【发布时间】:2018-10-19 02:51:03
【问题描述】:
以下是我的 docker-stack 文件。
version: "3"
services:
my-app:
image: my-image:latest
volumes:
- ./certs:/certs
ports:
- 6401:6401
networks:
my-net:
ipv4_address: 192.168.0.4
networks:
my-net:
external: true
它在我的机器上运行良好,将 certs 文件夹绑定到容器内的 certs。但是,在我在 docker-stack-node 映像中部署此服务的 CI 管道中不起作用。我得到的错误是
“绑定”类型的挂载配置无效:绑定挂载源路径不 存在。
我读到如果您将主机路径绑定到服务的容器中,则该路径必须存在于每个 swarm 节点上。所以,我想我需要创建一个命名卷。但是,使用命名卷我无法指定证书的源路径。这很令人困惑。有人可以帮忙吗?
【问题讨论】:
-
我认为这与命名卷无关。我认为这特别与 CI 主机没有运行它的 certs 目录有关。我不确定为什么证书应该在已安装的卷上。证书是如何生成的?它们是每次 CI 运行时生成的,还是更像是存储在某个地方的秘密或工件?如果它们已生成,您可以添加另一个生成的图像 + 容器,或者您可以通过从秘密管理平台或工件中获取来添加它。
-
这是存储在存储库中的工件(不是一个好的做法,但这些只是用于测试)。因此,当 CI 运行时,将在运行器上克隆存储库,然后将服务部署在运行器机器上。当我在 gitlab ci 文件中运行 ls 时,我可以在那里看到名为 certs 的目录。可能是docker执行目录不同?我正在使用另一个容器来复制这些文件吗?
-
@Niraj 你是怎么解决这个问题的?
标签: docker docker-compose docker-swarm docker-stack