1、查看容器内需要映射的目录
一般如果不知道容器内的目录有哪些,可以先通过docker run建一个容器,先进入容器内看看有哪些文件夹,记录下容器内的需要映射的文件夹目录。
docker run -it ubuntu:15.10 --name="test_container" /bin/bash
2.修改利用下列文件进行容器创建
create.sh
#!/bin/bash
set -e
# Default settings
CONTAINER_NAME="semseg" #容器名
IMAGE_NAME="gpu_docker" #所使用的镜像名
TAG_PREFIX="latest" #镜像版本标签
USER_ID="$(id -u)"
ROS_DISTRO="melodic" #ros的镜像设置,没有ros的就删掉
XSOCK=/tmp/.X11-unix #这两行为连接相关的设置,保持默认
XAUTH=$HOME/.Xauthority
SHARED_DOCKER_DIR=/home/base/shared_dir #docker里的映射目录,必须是容器里存在的目录
SHARED_HOST_DIR=$HOME/shared_dir #本地的目录,在创建容器之前创建好
VOLUMES="--volume=$XSOCK:$XSOCK:rw
--volume=$XAUTH:$XAUTH:rw
--volume=$SHARED_HOST_DIR:$SHARED_DOCKER_DIR:rw"
# Create the shared directory in advance to ensure it is owned by the host user
mkdir -p $SHARED_HOST_DIR
IMAGE=$IMAGE_NAME:$TAG_PREFIX
docker run \
-it \
$VOLUMES \
--gpus all \
--env=QT_X11_NO_MITSHM=1 \
--env="XAUTHORITY=${XAUTH}" \
--env="DISPLAY=${DISPLAY}" \
--env="USER_ID=$USER_ID" \
--env=NVIDIA_VISIBLE_DEVICES=all \
--env=NVIDIA_DRIVER_CAPABILITIES=all \
--name=$CONTAINER_NAME \
--privileged \
--net=host \
$IMAGE
运行文件:bash create.sh
创建容器之后,下次想再次进入容器,不想用exec,而且有时候用exec容易漏掉一些配置参数,使用下列文件每次运行进入容器。
3.修改下列文件进行启动docker
restart.sh
#!/bin/bash
set -e
# Default settings
CONTAINER_NAME="semseg" #容器名
USER_ID="$(id -u)"
docker start $CONTAINER_NAME
XSOCK=/tmp/.X11-unix
XAUTH=$HOME/.Xauthority
docker exec \
-it \
--env=QT_X11_NO_MITSHM=1 \
--env="XAUTHORITY=${XAUTH}" \
--env="DISPLAY=${DISPLAY}" \
--env="USER_ID=$USER_ID" \
--env=NVIDIA_VISIBLE_DEVICES=all \
--env=NVIDIA_DRIVER_CAPABILITIES=all \
--privileged \
$CONTAINER_NAME /bin/bash
运行文件:bash restart.sh