1. 登录
以用户名登录
docker exec -it --user root <容器ID> /bin/bash
docker 容器重命名
docker rename 原容器名 新容器名
挂载,docker可以支持把一个宿主机上的目录挂载到镜像里
通过-v参数,冒号前为宿主机目录,必须为绝对路径,冒号后为镜像内挂载的路径
docker run -it -v /home/dock/Downloads:/usr/Downloads ubuntu64 /bin/bash
How can I add a volume to an existing Docker container?
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
5a8f89adeead ubuntu:14.04 "/bin/bash" About a minute ago Exited (0) About a minute ago agitated_newton
$ docker commit 5a8f89adeead newimagename
$ docker run -ti -v "$PWD/dir1":/dir1 -v "$PWD/dir2":/dir2 newimagename /bin/bash
docker 启动参数
docker run -it -e DISPLAY=unix$DISPLAY --env="QT_X11_NO_MITSHM=1" \
--net=host --privileged=true \
-v /tmp/.X11-unix:/tmp/.X11-unix -v /home/andy/colcon_ws:/home/andy/colcon_ws \
-v $HOME/.Xauthority:/root/.Xauthority \
--user andy --name ros2_crystal \
--mount source=ros2-vol,target=/vol <image id> \
/bin/zsh
一个脚本示例:
#!/bin/bash
DNAME=ros2_docker
if [ ! "$(docker ps -q -f name=$DNAME)" ]; then
if [ "$(docker ps -aq -f status=exited -f name=$DNAME)" ]; then
echo "$DNAME is exited"
[ "$(docker start ros2_docker)" ] && docker exec -it ros2_docker /bin/bash
else
echo "$DNAME is not exist"
docker run -it -e DISPLAY=unix$DISPLAY --env="QT_X11_NO_MITSHM=1" \
--net=host --privileged=true -v /tmp/.X11-unix:/tmp/.X11-unix \
-v $HOME/.Xauthority:/root/.Xauthority --name ros2_docker --user docker \
f6798c4b1fdf /bin/bash
fi
else
echo "$DNAME is runing, now into"
docker exec -it ros2_docker /bin/bash
fi
主机安装了cuda,在docker中调用并使用
首先需要保证 主机根目录可以挂载,如挂载在 /host_root
在docker中
export PATH=$PATH:/host_root/usr/cuda/bin:/host_root/usr/lib/nvidia-xxx/bin
export LD_LIBRARY_PATH=/usr/lib/x86_64-linux-gnu:$LD_LIBRARY_PATH:/host_root/usr/lib/nvidia-xxx:/host_root/usr/lib/x86_64-linux-gnu:/host_root/usr/local/cuda/lib
## 为了方便使用,可以建立cuda超链接
sudo ln -s /host_root/usr/local/cuda-x.x /usr/local/cuda-x.x
sudo ln -s /host_root/usr/local/cuda /usr/local/cuda
export CUDNN_INSTALL_DIR=/usr/local/cuda
export CUDA_INSTALL_DIR=/usr/local/cuda
经过上述设置后,测试nvcc和nvidia-smi两个命令,如果版本号正确,则说明挂载成功
xxx$ nvcc --version
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2019 NVIDIA Corporation
Built on Sun_Jul_28_19:07:16_PDT_2019
Cuda compilation tools, release 10.1, V10.1.243
xxx$ nvidia-smi
Tue Oct 29 18:47:37 2019
+-----------------------------------------------------------------------------+
| NVIDIA-SMI 418.56 Driver Version: 418.56 CUDA Version: 10.1 |
|-------------------------------+----------------------+----------------------+
| GPU Name Persistence-M| Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap| Memory-Usage | GPU-Util Compute M. |
|===============================+======================+======================|
| 0 GeForce GTX 107... Off | 00000000:01:00.0 On | N/A |
| 23% 52C P0 30W / 180W | 1821MiB / 8117MiB | 10% Default |
+-------------------------------+----------------------+----------------------+
+-----------------------------------------------------------------------------+
| Processes: GPU Memory |
| GPU PID Type Process name Usage |
|=============================================================================|
+-----------------------------------------------------------------------------+
修改docker镜像位置
#!/bin/bash
mkdir /etc/systemd/system/docker.service.d
touch /etc/systemd/system/docker.service.d/docker-overlay.conf
echo "[Service]
ExecStart=
ExecStart=/usr/bin/dockerd --graph=/home/.docker_overlay --storage-driver=overlay" >> /etc/systemd/system/docker.service.d/docker-overlay.conf
sudo systemctl daemon-reload
sudo systemctl restart docker
主机安装了nvidia驱动,rviz2无法启动时
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/host_root/usr/lib/nvidia-415/
其中/host_root/usr/lib/nvidia-415/表示nvidia驱动的位置
Problem
How to fix docker: Got permission denied issue
sudo chmod 666 /var/run/docker.sock
网友评论