Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在docker compose命名卷中使用现有目录~/.ssh?_Docker_Ssh_Docker Compose_Docker Volume - Fatal编程技术网

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

如何在docker compose命名卷中使用现有目录~/.ssh?,docker,ssh,docker-compose,docker-volume,Docker,Ssh,Docker Compose,Docker Volume,我想将我的~/.ssh映射到docker container.ssh。我让docker作曲 version: '3' volumes: ssh-data: driver: local driver_opts: type: none device: ~/.ssh/ o: bind services: mysql: container_name: mysql image: chagridsada/galera-maria

我想将我的~/.ssh映射到docker container.ssh。我让docker作曲

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\u ssh-data/\u数据,但在docker-compose.yml中它映射到/app/.ssh/

如果我将映射更改为~/.ssh:/app/.ssh,那么它可以正常工作,但我也必须为其他容器使用ssh数据卷,所以我必须创建命名卷


为什么要尝试使用/var/lib/docker/volumes/training\u ssh-data/\u data进行映射?

我想!?问题是您在Docker Compose中使用的是相对~/.ssh引用,应该使用绝对引用


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

首先,这似乎是个坏主意。在映像本身中创建您需要的任何配置,并为容器生成专用密钥,而不是使用您自己的密钥。我们必须从容器中执行ssh隧道,为此,我们需要将密钥映射到容器中。如果我们在容器中生成新密钥,可能需要为ssh添加新密钥tunneling@chepner将它视为已经退出的不同目录,看看是否可以使用该目录。