Docker Podman 启动命令详解

 更新时间:2026年06月12日 10:45:40   作者:丑过三八线  
本文详细介绍了使用Podman和Docker启动容器的方法,并比较了两者的主要区别和使用注意事项,涵盖网络模式、卷挂载及常见问题解决方案等内容,感兴趣的朋友一起看看吧

系统环境

  • 操作系统: Kylin Linux Advanced Server V10 (Halberd)
  • 架构: ARM64 (aarch64)
  • 内核版本: 4.19.90-89.11.v2401.ky10.aarch64
  • Docker 版本: 29.5.3
  • runc 版本: 1.0.0-rc3
  • containerd runc 路径: /usr/local/sbin/runc
  • 离线镜像包: /root/tdengine-tsdb-oss-docker-3.4.1.6-linux-arm64.tar

方案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

参数说明

  • -o--output: 指定输出文件路径
  • 最后参数: 镜像名称或 ID

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 在内核 4.19 上无法运行此容器(time namespace 不支持)
  • ❌ Podman 不支持 --restart 参数,需使用 systemd 管理自动重启
  • ❌ 旧版 Podman 不支持 podman network 命令
  • ✅ 使用 --network host 模式,无需配置网络
  • ✅ 使用离线镜像包导入:podman load -i /root/tdengine-tsdb-oss-docker-3.4.1.6-linux-arm64.tar
  • ✅ 推荐使用 Podman 替代 Docker
  • ✅ 使用绝对路径 /root/data-collection/...
  • ✅ 镜像版本为 tdengine/tsdb-arm64:3.4.1.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命令内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Docker实现挂载的方式汇总

    Docker实现挂载的方式汇总

    Docker实现挂载有多种方式,下面给大家分享Docker实现挂载常见方式,感兴趣的朋友跟随小编一起看看吧
    2023-11-11
  • 一条命令重启所有已停止的docker容器操作

    一条命令重启所有已停止的docker容器操作

    这篇文章主要介绍了一条命令重启所有已停止的docker容器操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-11-11
  • Docker如何安装Oracle 19c

    Docker如何安装Oracle 19c

    这篇文章主要介绍了Docker如何安装Oracle 19c问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-12-12
  • firewalld防火墙开启后无法启动docker问题及解决

    firewalld防火墙开启后无法启动docker问题及解决

    文章描述了在Linux上开启或重启防火墙后,创建docker自定义网络时出现的错误,原因是firewalld和docker在操作iptables时发生了冲突,文章提供了两种解决办法:1. 重启Docker服务;2. 让Docker绕过firewalld
    2025-12-12
  • 详解Docker如何在前端项目动态插入并使用变量

    详解Docker如何在前端项目动态插入并使用变量

    这篇文章主要为大家详细介绍如何在Docker前端镜像中设置变量以及使用变量的方法,文中的示例代码讲解详细,有需要的小伙伴可以跟随小编一起学习一下
    2024-04-04
  • Docker设置mysql不区分大小写问题

    Docker设置mysql不区分大小写问题

    这篇文章主要介绍了Docker设置mysql不区分大小写问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-01-01
  • 给运行中的docker容器添加新的端口

    给运行中的docker容器添加新的端口

    今天小编就为大家分享一篇关于给运行中的docker容器添加新的端口,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-12-12
  • docker-compose 搭建redis集群(三台服务器,每台服务器上一主一从)

    docker-compose 搭建redis集群(三台服务器,每台服务器上一主一从)

    本文主要介绍了Docker Compose搭建Redis集群是一种便捷高效的方法,本次搭建使用三台服务器,每台服务器上一主一从,具有一定的参考价值,感兴趣的可以了解一下
    2025-03-03
  • docker安装MinIO全过程

    docker安装MinIO全过程

    这篇文章主要介绍了docker安装MinIO全过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-09-09
  • 两小时入门Docker教程实践

    两小时入门Docker教程实践

    这篇文章主要介绍了两小时入门Docker教程实践,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-03-03

最新评论