【问题标题】:Docker within Docker container not mapping .ssh volumeDocker 容器中的 Docker 未映射 .ssh 卷
【发布时间】:2020-09-11 16:12:03
【问题描述】:

我正在尝试将一个卷从我的主主机映射到一个 docker 容器,然后创建另一个 docker 容器。

我的第一个容器是按照以下方式创建的:

docker run --rm -it \
-e JOB="release" \
-e LOG_FOLDER="$logDirectory" \
-v "$logDirectory":"$logDirectory" \
-e TEMP_FOLDER="$tempFolder" \
-v ~/.ssh:/root/.ssh \
-v "$tempFolder":"$tempFolder" \
-v /var/run/docker.sock:/var/run/docker.sock \
release

上面的效果很好,当我 /bin/bash 进入这个容器时,我可以看到 .ssh 文件夹已映射并显示来自我的主机的内容。

但是当我尝试在这个容器中创建另一个 docker 容器时,使用以下内容:

docker run --rm -it \
-e JOB=summary \
-e TEMP_FOLDER="$TEMP_FOLDER" \
-v "$TEMP_FOLDER":"$TEMP_FOLDER" \
-v ~/.ssh:/root/.ssh \
-v /var/run/docker.sock:/var/run/docker.sock \
summary /bin/bash

容器创建没有问题,但 .ssh 文件夹内容尚未映射。但是 TEMP_FOLDER 已正确映射并显示来自主机的内容,我不知道为什么 .ssh 文件夹没有做同样的事情?

是否存在权限问题?

【问题讨论】:

    标签: linux docker ssh


    【解决方案1】:

    不知道为什么,但我发现的解决方法如下,也许 root 用户在容器中不一样。

    docker run --rm -it \
    -e JOB="release" \
    -e LOG_FOLDER="$logDirectory" \
    -v "$logDirectory":"$logDirectory" \
    -e TEMP_FOLDER="$tempFolder" \
    -v ~/.ssh:/root/.ssh \
    -v ~/.ssh:/home/user/.ssh \
    -v /home/user/.ssh:/root/.ssh \
    -v "$tempFolder":"$tempFolder" \
    -v /var/run/docker.sock:/var/run/docker.sock \
    release
    
    docker run --rm -it \
    -e JOB=summary \
    -e TEMP_FOLDER="$TEMP_FOLDER" \
    -v "$TEMP_FOLDER":"$TEMP_FOLDER" \
    -v /home/user/.ssh:/root/.ssh \
    -v /var/run/docker.sock:/var/run/docker.sock \
    summary /bin/bash
    

    【讨论】:

    • 容器内的 shell 在 ~ 被传递到主机之前扩展,并且主机 Docker 守护进程总是解释 -v 选项(你不能将容器内容绑定到另一个容器) .另请记住,您可以在读写模式下绑定挂载任何主机文件(包括/etc/shadow/etc/sudoers),因此在此模式下引用和安全问题要非常小心。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多