Skip to content
YMK Must be Kidding
Go back

Docker Symbolic Linked Volumes

在 docker {% fa_inline docker fab %} 裡出現 symbolic links 要注意喔!

Introduction

最近工作上用 Docker 來建立自己的 TensorFlow 開發環境, 因為 TensorFlow 的 Docker Images 其實是使用 root , 而且想要再上面再裝一些自己的 Packages ,所以會寫一個 Dockerfile , 基於 **TensorFlow 的 Docker Images ** 。

其實這邊會先有一個問題,因為不想用 root ,所以在 Dockerfile 裡面會 新增一個一般 user ,但是這個 useruid 預設會是 1000 , 可能跟外面的 uid 不同,怎麼解決這個另外再說。

這篇要講的是 Docker Volumes 的部份,首先就是想要把外面的 Source code 或是其他的目錄,放進 Docker Container 裡面,為了不要一直 docker cp , 其實是可以善加利用 Docker Volumes ,像是如下的設定,

$DOCKER start $CONTAINER_NAME > /dev/null 2> /dev/null || {
    echo "Creating new container..."
    $DOCKER run \
          --detach \
          --net=host \
          --name $CONTAINER_NAME \
          --tty \
	  --volume $PWD/volumes:/home/user/volumes \
          $IMAGE_NAME:$TAG_NAME
}

通常這樣是很 OK 的,在這層目錄的 volumes 就會對應到 Docker Container 裡面的 /home/user/volumes ,外面改裡面也看得到,反之亦然。

不過要是 volumes 裡面包含有 symbolic link 的目錄,就會出錯了, 因為 Docker Container 裡面通常不會有一樣指過去的路徑。

{% blockquote %} 所以就寫了一個,可以自己尋找 volumes 底下 symbolic link 的目錄, 再用多個 —volume 串起來的功能。 {% endblockquote %}

function get_volumes_opt() {
    VOLUMES_OPT="--volume $PWD/volumes:/home/tflite/volumes"
    VOLUMES_OPT="$VOLUMES_OPT --volume $HOME/.Xauthority:/home/tflite/.Xauthority:rw"
    for dir in $(find volumes -maxdepth 1 -type l); do
        VOLUMES_OPT="$VOLUMES_OPT --volume $(realpath $dir):/home/tflite/$dir"
    done
}
get_volumes_opt

Share this post on:

Previous Post
Termux Environment Setup Script
Next Post
/dev/null with pybind11 and unittest.mock