如何在docker-compose命名卷中使用现有目录〜/ .ssh?

我想将~/.ssh映射到Docker容器.ssh。我有docker compose

version: '3'

volumes:
  ssh-data:
    driver: local
    driver_opts:
      type: none
      device: ~/.ssh/
      o: bind

services:
  mysql:
    container_name: mysql
    image: chagridsada/galera-mariadb
    ports:
      - "3306:3306"
    volumes:
      - "ssh-data:/app/.ssh/"
    environment:
      CLUSTER_NAME: galera-db-cluster
      CLUSTER_JOIN:
      MYSQL_ROOT_PASSWORD: dev
      XTRABACKUP_PASSWORD: dev

但是当我尝试运行容器时,它给出了错误。

$ docker-compose up -d

Creating network "training_default" with the default driver
Creating volume "training_ssh-data" with local driver
Creating mysql ... error

ERROR: for mysql  Cannot start service mysql: error while mounting volume '/var/lib/docker/volumes/training_ssh-data/_data': failed to mount local volume: mount ~/.ssh/:/var/lib/docker/volumes/training_ssh-data/_data,flags: 0x1000: no such file or directory

ERROR: for mysql  Cannot start service mysql: error while mounting volume '/var/lib/docker/volumes/training_ssh-data/_data': failed to mount local volume: mount ~/.ssh/:/var/lib/docker/volumes/training_ssh-data/_data,flags: 0x1000: no such file or directory
ERROR: Encountered errors while bringing up the project.

它尝试与容器中的/var/lib/docker/volumes/training_ssh-data/_data进行映射,但在docker-compose.yml中将其映射至/app/.ssh/

如果我将映射更改为~/.ssh:/app/.ssh,则可以正常工作,但是我也必须将ssh-data卷用于其他容器,因此必须创建named volume

为什么要尝试使用/var/lib/docker/volumes/training_ssh-data/_data进行映射?

wzq185833229 回答:如何在docker-compose命名卷中使用现有目录〜/ .ssh?

我认为(!?)问题是您正在Docker Compose中使用相对(~/.ssh)引用,应该使用绝对引用

如果我没记错的话,您可以在Docker Compose文件中使用环境变量,因此可以在Linux上将~/.ssh替换为${HOME}/.ssh

本文链接:https://www.f2er.com/3064176.html

大家都在问