【问题标题】:Copy files from docker volume从 docker 卷复制文件
【发布时间】:2020-05-30 18:53:55
【问题描述】:

我有很多容器可以使用 pem 文件,但是我想将此文件存储到唯一的卷调用键中。

我创建卷:

docker run -v /data --name keys busybox

并在那里添加文件:

docker cp JWT_PRIVATE_KEY.pem keys:/data/

现在,当构建需要这些文件的服务时,希望将它们从 keys:data 复制到我的 /api 工作目录。

这是我的 docker-compose:

version: '3'

services:
  my_api:
    container_name: my_api
    build: .
    ports:
      - "5555:5555"
    volumes:
      - keys:/data
    networks:
      - my-network
    env_file:
      - .env

volumes:
  keys:

networks:
  my-network:
    external: true

这是我的 DockerFile:

FROM node:lts-alpine

WORKDIR /api

COPY package.json /api

RUN yarn install

COPY . /api 

RUN yarn build

COPY ./docker-entrypoint.sh /

EXPOSE 5555

RUN ["chmod", "+x", "/docker-entrypoint.sh"]

ENTRYPOINT ["/docker-entrypoint.sh"]

【问题讨论】:

    标签: docker docker-compose


    【解决方案1】:

    如果您在 Docker 空间之外存在诸如 TLS 密钥和证书之类的东西,则使用 bind mount 将其注入容器通常比使用命名卷更容易。

    volumes:
      # this references a local directory holding the keys
      - ./keys:/data
    

    在上面显示的设置中,您有一个名为keys容器,在/data 上安装了一个匿名卷,但这与 Compose 名称为 @987654326 的卷是分开的@(并带有一个类似于api_keysdocker volume ls 名称,以当前目录的名称开头)。

    如果你真的需要在这里使用命名卷,可能最简单的将数据复制到其中的方法是到docker-compose run一个临时容器:

    docker-compose run \
      -v $PWD:/keys \
      my_api \
      cp /keys/* /data
    

    这应该从docker-compose.yml 文件继承volumes:(因此将卷安装在/data 上),但还会从主机系统添加绑定安装。在该临时容器中,您将文件从主机绑定挂载复制到命名卷挂载中,然后它们将持续存在。

    如果您使用 Let's Encrypt 之类的东西,可以在 Docker 空间内完全获取和管理证书,则命名卷设置更有意义。

    【讨论】:

    • 谢谢你的回答,但是 docker-compose run 还不够=/。当我构建我的 DockerFile 时,需要将文件从我创建的卷复制到工作目录“/api”。如果在我的项目中添加了密钥,则一切正常,因为路径将是“/api/mykey.pem”。但是我不能在我的项目中拥有这些密钥,而且很多容器也需要使用这些密钥,所以只在一个地方拥有会很棒。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-18
    相关资源
    最近更新 更多