推荐linux版本:ubuntu 22.04
一、创建docker具有systemctl权限的容器:
1. 撰写Dockerfile
FROM ubuntu:22.04# 安装 systemd 和 dbus(systemctl 通讯需要它)
RUN apt-get update && apt-get install -y \systemd \systemd-sysv \dbus \&& apt-get clean \&& rm -rf /var/lib/apt/lists/*# 告知 systemd 运行在容器环境
ENV container docker# 启动时默认执行 systemd
CMD ["/lib/systemd/systemd"]
2. build镜像
在 Dockerfile 所在目录运行:
docker build -t my-ubuntu-with-systemd .
# 创建别名(改名)
docker tag old-name:v1 new-name:v2
3. 创建容器
docker run -itd --name my-ubuntu4 --privileged --cgroupns=host -v /sys/fs/cgroup:/sys/fs/cgroup:ro ubuntu2204-with-systemd:v1 /lib/systemd/systemd
登录容器验证:
docker exec -it <容器id> /bin/bash
docker stauts
二、ros安装
容器创建:
docker run -it --name ros2 -d --restart unless-stopped -e TZ=Asia/Shanghai -v /home/container/ros2/data:/data \
--privileged --cgroupns=host -v /sys/fs/cgroup:/sys/fs/cgroup:rw \
-p 8022:22 \
--device /dev:/dev \
-v /home/container/ros2/data:/data \
-v /tmp/.X11-unix:/tmp/.X11-unix \
-v /run/user/1000/pulse:/run/user/1000/pulse \
-v /etc/machine-id:/etc/machine-id \
-v /var/lib/dbus:/var/lib/dbus \
-v /home/pi/docker_ros2/tmp:/home/ubuntu/share/tmp \
-e PULSE_SERVER=unix:/run/user/1000/pulse/native \
-e LIBGL_ALWAYS_SOFTWARE=1 \
-e DISPLAY=:0 \
ubuntu2204-with-systemd:v1 /lib/systemd/systemd
--net=host 容器使用宿主机ip, 端口-p映射忽略
docker run -it --name test --net=host -d --restart unless-stopped -e TZ=Asia/Shanghai -v /home/container/ros2/data:/data
--privileged --cgroupns=host -v /sys/fs/cgroup:/sys/fs/cgroup:rw ubuntu2204-with-systemd:v1 /lib/systemd/systemd
-p 8026:22 ubuntu2204-with-systemd:v1 /lib/systemd/systemd
docker run -it --name test -p 8022:22 --net=host -d --restart unless-stopped -e TZ=Asia/Shanghai -v /home/container/ros2/data:/data
--privileged --cgroupns=host -v /sys/fs/cgroup:/sys/fs/cgroup:rw ubuntu2204-with-systemd:v1 /lib/systemd/systemd
ubuntu:22.04 /bin/bash
