4

以下是我的 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 文件夹绑定到容器内的证书。但是,在我在 docker-stack-node 映像中部署此服务的 CI 管道中不起作用。我得到的错误是

“绑定”类型的挂载配置无效:绑定挂载源路径不存在。

我读到如果您将主机路径绑定到服务的容器中,则该路径必须存在于每个 swarm 节点上。所以,我想我需要创建一个命名卷。但是,使用命名卷我无法指定证书的源路径。这很令人困惑。有人可以帮忙吗?

4

2 回答 2

1

要绑定到目录,该目录必须存在于主机上,因此./certs在运行容器的主机上不存在,所以......

如果要绑定卷,则需要运行:

mkdir -p ./certs

在运行容器的机器上,它将工作。

它可以在您的机器上运行,因为该目录存在于本地。

复制目录到主机

scp -r /local/directory/ username@to_host:/remote/directory/
于 2018-10-19T08:59:13.657 回答
1

@Niraj我也遇到了这个问题,并发现每个节点都需要运行文件。在你的情况下,我会这样做:

  1. 在您的Dockerfile 中创建 certs 文件夹
    • RUN mkdir /certs
  2. 将compose-file更改为使用绝对路径
    • - $PWD/certs:/certs
  3. 将证书复制到容器中
    • docker cp <file_name> <container_id>:/certs

希望这可以帮助!

于 2020-03-22T23:51:59.060 回答