服务器上使用 Docker
使用 GPU
需要在 docker run
(或 docker create
,下同)命令中加上参数 --gpus all
,启动 container 后输入 nvidia-smi -L
可以检查是否配置成功。
挂载目录下的权限问题
创建容器时 -v
参数可以将本地目录挂载到容器上,但容器运行时使用的是 root 身份,如果使用 docker 在挂载目录下创建了文件,文件的所有者就是 root
,退出 docker 后便无法进行修改。
解决方案:
已经创建:
需要在 docker 内用
chown
命令修改所有者,例如:shell$ chown -R <uid>:<gid> <directory>
还未创建:
首先保存当前容器:
shell$ docker commit <container_name> <image_name>:<tag>
然后在
docker run
命令中加上参数-u <uid>
重新创建容器。不过这样创建的容器里,prompt 中的 username 会是 "I have no name!"(因为 docker 并不知道宿主机的用户)。虽然能用但是看起来很难受,可以选择在docker run
命令中加上-v /etc/passwd:/etc/passwd:ro
,或是在Dockerfile
中加上dockerfileRUN useradd -u <uid> -m <username> USER <username>
从容器中下载文件到宿主机
shell
$ docker cp <container_name>:<source_path> <dest_path>