docker

关注公众号 jb51net

关闭
首页 > 网站技巧 > 服务器 > 云和虚拟化 > docker > Docker Podman命令

Docker Podman 启动命令详解

作者:丑过三八线

本文详细介绍了使用Podman和Docker启动容器的方法,并比较了两者的主要区别和使用注意事项,涵盖网络模式、卷挂载及常见问题解决方案等内容,感兴趣的朋友一起看看吧

系统环境

方案1:使用 Podman(推荐)

Podman 在 Kylin V10 上兼容性更好,无需修改内核即可运行。

1. 安装 Podman

yum install -y podman

2. 导入离线镜像

# 导入镜像到 Podman
podman load -i /root/tdengine-tsdb-oss-docker-3.4.1.6-linux-arm64.tar
# 查看导入的镜像
podman images

3. 导出镜像

# 导出镜像到 tar 文件
podman save -o /root/tdengine-export.tar tdengine/tsdb-arm64:3.4.1.6
# 或者使用镜像 ID 导出
podman save -o /root/tdengine-export.tar <镜像ID>
# 验证导出文件
ls -lh /root/tdengine-export.tar

参数说明

4. 启动容器(单行命令)

⚠️ 注意:使用 --network host 模式,容器直接使用宿主机网络,无需创建网络。

podman run -d --name data-collection-tdengine --privileged --network host -v /root/data-collection/data-collection-tdengine/init.sql:/docker-entrypoint-initdb.d/init.sql:rw -v /root/data-collection/data-collection-tdengine/tdengine-data:/var/lib/taos:rw tdengine/tsdb-arm64:3.4.1.6

5. 启动容器(多行格式)

podman run -d \
  --name data-collection-tdengine \
  --privileged \
  --network host \
  -v /root/data-collection/data-collection-tdengine/init.sql:/docker-entrypoint-initdb.d/init.sql:rw \
  -v /root/data-collection/data-collection-tdengine/tdengine-data:/var/lib/taos:rw \
  tdengine/tsdb-arm64:3.4.1.6

6. 设置容器自动重启(systemd 管理)

Podman 不支持 --restart 参数,需要使用 systemd 管理自动重启:

# 生成 systemd 服务文件
podman generate systemd --name data-collection-tdengine --files --new
# 移动到 systemd 目录
mv container-data-collection-tdengine.service /etc/systemd/system/
# 启用并启动服务
systemctl enable --now container-data-collection-tdengine.service
# 验证服务状态
systemctl status container-data-collection-tdengine.service

7. 验证容器状态

# 查看容器状态
podman ps -a | grep tdengine
# 查看容器日志
podman logs data-collection-tdengine
# 进入容器
podman exec -it data-collection-tdengine bash

Podman 完整操作流程

# 步骤1: 安装 Podman
yum install -y podman
# 步骤2: 导入离线镜像
podman load -i /root/tdengine-tsdb-oss-docker-3.4.1.6-linux-arm64.tar
# 步骤3: 查看镜像名称
podman images
# 步骤4: 启动容器(使用 host 网络)
podman run -d \
  --name data-collection-tdengine \
  --privileged \
  --network host \
  -v /root/data-collection/data-collection-tdengine/init.sql:/docker-entrypoint-initdb.d/init.sql:rw \
  -v /root/data-collection/data-collection-tdengine/tdengine-data:/var/lib/taos:rw \
  tdengine/tsdb-arm64:3.4.1.6
# 步骤5: 验证容器状态
podman ps -a

Podman 常用命令对照

Docker 命令Podman 命令
docker pspodman ps
docker ps -apodman ps -a
docker imagespodman images
docker load -i <tar>podman load -i <tar>
docker save -o <tar> <image>podman save -o <tar> <image>
docker logs <container>podman logs <container>
docker exec -it <container> bashpodman exec -it <container> bash
docker stop <container>podman stop <container>
docker start <container>podman start <container>
docker rm <container>podman rm <container>
docker rmi <image>podman rmi <image>

方案2:使用 Docker(需要升级内核)

问题现象

启动容器时报错:

docker: Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: namespace {"time" ""} does not exist: unknown

问题原因

根本原因: 内核 4.19 不支持 time namespace 特性。time namespace 是 Linux 5.6+ 内核才引入的功能。

Docker 导入离线镜像

# 导入镜像到 Docker
docker load -i /root/tdengine-tsdb-oss-docker-3.4.1.6-linux-arm64.tar
# 查看镜像
docker images

升级内核步骤

# 1. 查看可用内核版本
yum list kernel
# 2. 升级内核
yum update kernel -y
# 3. 重启系统
reboot
# 4. 重启后验证内核版本
uname -r
# 5. 重启 Docker 服务
systemctl restart docker
# 6. 启动容器
docker run -d \
  --name data-collection-tdengine \
  --privileged \
  --restart always \
  --network host \
  -v /root/data-collection/data-collection-tdengine/init.sql:/docker-entrypoint-initdb.d/init.sql:rw \
  -v /root/data-collection/data-collection-tdengine/tdengine-data:/var/lib/taos:rw \
  tdengine/tsdb-arm64:3.4.1.6

参数说明

网络模式说明

参数说明
--network host容器直接使用宿主机网络,无需端口映射
--network bridge默认桥接模式,需要 -p 端口映射

⚠️ 使用 --network host 模式时,容器端口直接暴露在宿主机上,无需 -p 参数。

卷挂载说明

宿主机路径容器路径说明
/root/data-collection/data-collection-tdengine/init.sql/docker-entrypoint-initdb.d/init.sql初始化 SQL 脚本
/root/data-collection/data-collection-tdengine/tdengine-data/var/lib/taosTDEngine 数据目录

系统信息检查

# 查看内核版本
uname -r
# 查看 Docker 版本
docker version
# 查看 runc 版本
runc --version
# 查看 containerd 使用的 runc 路径
/usr/local/sbin/runc --version
# 查看系统信息
cat /etc/os-release
# 查看 containerd 配置
cat /etc/containerd/config.toml

常见问题

问题1:Podman 网络命令不存在

错误信息

Command "network" not found.
See 'podman --help'.

解决方案:旧版 Podman 不支持 podman network 命令,使用 --network host 模式。

问题2:Podman 缺少 CNI 网络

错误信息

error configuring network namespace for container: Missing CNI default network

解决方案:使用 --network host 模式,绕过 CNI 网络配置。

问题3:Podman 不支持 --restart 参数

错误信息

flag provided but not defined: -restart

解决方案:移除 --restart 参数,使用 systemd 管理自动重启。

问题4:Docker time namespace 错误

错误信息

namespace {"time" ""} does not exist: unknown

解决方案:使用 Podman 或升级内核到 5.6+。

注意事项

原始 docker-compose 配置

data-collection-tdengine:
    image: tdengine/tsdb-amd64:3.4.0.2
    container_name: data-collection-tdengine
    ports:
      - "6030:6030"  # 核心服务端口,客户端连接使用
      - "6041:6041"  # RESTful API端口(重要!)
      - "6043:6043"  # 3.x版本Web管理界面端口
      - "6044:6044"  # 可选,WebSocket端口
      - "6045:6045"  # 集群间通信端口
      - "6046:6046"  # 集群间通信端口
    volumes:
      - ./data-collection-tdengine/init.sql:/docker-entrypoint-initdb.d/init.sql:rw
      - ./data-collection-tdengine/tdengine-data:/var/lib/taos:rw
    privileged: true
    restart: always
    tty: true
    networks:
      - data_collection_network
      - default

到此这篇关于Docker Podman 启动命令的文章就介绍到这了,更多相关Docker Podman命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文