Skip to content

🚀 使用 Docker Compose 部署 Ubuntu 32 位容器(i386&ubuntu)

前言 找不到使用途径,先留存。

🚀 使用 Docker Compose 部署 i386 Ubuntu 环境

通过 Docker Compose 可以快速搭建和管理 i386 架构的 Ubuntu 环境。这尤其适用于测试和运行 32 位应用程序。以下教程将指导你完成整个部署过程。

📦 项目简介

i386/ubuntu 镜像为你提供了一个官方的、32 位的 Ubuntu 系统环境。

特点类别 具体说明
架构与环境 纯 32 位 (i386) 用户空间,方便测试和运行 32 位应用程序。
语言与编码 通过环境变量配置为 C.UTF-8 字符集,支持中文显示。
数据持久化 将容器内的 /root 目录挂载到宿主机,方便持久化配置和文件。
交互式操作 配置了标准输入和 TTY,支持交互式操作,就像使用虚拟机一样。

使用场景 * 测试 32 位应用程序:在 64 位系统上运行遗留或特定的 32 位软件。 * 构建 i386 架构的软件:为 i386 架构编译和打包软件。 * 学习与开发:提供一个隔离的、可随意配置的 32 位 Linux 学习环境。

📋 部署前准备

1.环境要求 确保你的服务器已安装 DockerDocker Compose。你可以通过在终端执行 docker -vdocker compose version 来验证。

2.安装 Docker 和 Docker Compose 若系统未安装,可参考以下步骤在 Ubuntu 系统上进行安装:

    # 更新软件包索引并安装依赖
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg lsb-release

    # 添加 Docker 的官方 GPG 密钥
    sudo mkdir -m 0755 -p /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

    # 设置 Docker 稳定版仓库
    echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | sudo tee /etc/apt/sources.list.d/docker.list > /dev/null

    # 安装 Docker Engine
    sudo apt-get update
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

    # (可选) 安装独立版本的 Docker Compose
    # 可从 GitHub 下载,例如:
    # sudo curl -L "https://github.com/docker/compose/releases/download/1.29.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
    # sudo chmod +x /usr/local/bin/docker-compose

3.配置国内镜像源(可选,用于加速) 为了提升拉取镜像的速度,可以配置 Docker 镜像加速器。 * 创建或编辑 /etc/docker/daemon.json 文件:

        sudo nano /etc/docker/daemon.json
*   添加镜像源,例如:
        {
          "registry-mirrors": [
            "https://hub-mirror.c.163.com",
            "https://mirror.baidubce.com"
          ]
        }
*   重启 Docker 服务使配置生效:
        sudo systemctl daemon-reload
        sudo systemctl restart docker

⚙️ 配置 Docker Compose

1.创建项目目录 创建一个目录(如 ubuntu-i386)用于存放所有相关文件,并进入该目录。

    mkdir -p /path/to/your/ubuntu-i386 && cd /path/to/your/ubuntu-i386

2.创建 docker-compose.yml 文件 将以下配置内容保存到新创建的 docker-compose.yml 文件中。

services:
  ubuntu:
    stdin_open: true  # 开启标准输入(允许交互式操作,如键盘输入)
    tty: true         # 分配伪终端(模拟终端环境,支持命令行交互)
    container_name: ubuntu386  # 容器名称,便于识别和管理
    image: i386/ubuntu  # 32位 Ubuntu 基础镜像(i386 架构)
    command: /bin/bash  # 启动后直接进入 bash 终端 # 容器启动后默认执行的命令,此处是启动bash shell
    #command: /bin/bash -e export LANG="C.UTF-8"
    #environment:
    #- export LANG="C.UTF-8" # 这个是环境变量
    environment:
      - LANG=C.UTF-8       # 设置语言编码为 UTF-8,解决中文乱码
      - LC_ALL=C.UTF-8     # 统一 locale 配置,增强编码兼容性
    volumes:
      - ./root:/root  # 数据持久化:本地 ./root 目录 ↔ 容器 /root 目录(保存用户文件)
networks: {}  # 不配置自定义网络,使用默认桥接网络



3.关键配置说明 * 镜像i386/ubuntu 是官方维护的 32 位 Ubuntu 镜像。 * 交互式支持stdin_open: truetty: true 是保证我们可以交互式使用这个容器的关键。 * 数据持久化volumes 部分将容器内的 /root 目录(用户主目录)挂载到宿主机的 ./root 目录下。这样,即使在容器被删除后,/root 目录下的文件(如 bash 历史、配置文件等)依然保留在宿主机上。 * 字符编码:环境变量 LANG=C.UTF-8LC_ALL=C.UTF-8 确保了容器内使用 UTF-8 字符集,这对于正确显示和处理多语言字符(如中文)非常重要。


3.关键配置说明2

配置项 作用与注意事项
image: i386/ubuntu 核心镜像!i386 表示 32 位架构,区别于 64 位的 ubuntu 镜像,确保运行 32 位软件兼容性。
stdin_open: true 与 tty: true 两者结合开启 “交互式终端”,允许通过 docker exec 登录容器并输入命令,删除则容器启动后会立即退出。
volumes: ./root:/root 实现 “容器内文件本地保存”,例如在容器内 /root 新建 test.txt,本地 ./root 目录会同步出现该文件,容器删除后文件不丢失。
LANG=C.UTF-8 解决命令行中文显示乱码问题(如 ls 显示中文文件名、输出中文日志),必须保留。

🚀 启动与验证

1.启动服务docker-compose.yml 文件所在目录下,执行以下命令来启动服务。

    docker-compose up -d # 使用 `-d` 参数在后台运行

2.检查服务状态 使用以下命令查看容器是否正常运行。

    docker-compose ps

如果状态(State)栏显示为 Up,则表明容器已成功启动。

3.进入容器 容器在后台运行,我们需要使用 exec 命令进入容器内部。

    docker-compose exec ubuntu /bin/bash

执行成功后,你的命令行提示符通常会发生变化,表示你已经进入了 ubuntu386 容器内部。

# 进入容器 bash 终端(容器名是配置中的 ubuntu386)
docker exec -it ubuntu386 bash
  • 成功进入后,命令行前缀会显示 root@容器ID:/#,表示已在 32 位 Ubuntu 环境中;
  • 验证 32 位环境:执行 getconf LONG_BIT,输出 32 说明架构正确;
  • 验证中文编码:执行 echo "测试中文",若正常显示 “测试中文” 而非乱码,说明编码配置生效。

4.基础验证 在容器内,可以执行一些基础命令来验证系统:

    # 检查系统架构
    uname -m
    # 预期输出:i686 (i386架构的内核名称)

    # 检查系统版本
    cat /etc/os-release

    # 检查语言环境
    echo $LANG
    # 预期输出:C.UTF-8

🔧 基础配置与使用

1.更新软件源和安装软件 进入容器后,首先建议更新软件包列表,然后可以安装所需的软件。

    # 更新软件包列表
    apt-get update

    # 安装一些常用工具,例如 vim, curl, wget
    apt-get install -y vim curl wget

    # 安装其他你需要的 32 位软件包
    # apt-get install -y <package-name>

注意:容器默认以 root 用户身份运行,因此无需使用 sudo

2.数据持久化验证 在容器的 /root 目录下创建的文件,会在容器停止后依然保留在宿主机的 ./root 目录中。你可以在容器内和宿主机上分别操作验证: * 在容器内 (/root):

        echo "Hello from inside the container!" > /root/persistent_file.txt
  • 在宿主机上 (项目目录下的 ./root):
        cat ./root/persistent_file.txt
        # 应该能看到 "Hello from inside the container!"

3.退出容器 在容器内部的命令行中,输入 exit 即可退出容器,回到宿主机的命令行。


🔧 基础配置与使用2

进入容器后,可像使用普通 Ubuntu 系统一样操作,核心场景包括软件安装、文件管理、脚本运行等:

1. 步骤 1:更新系统与安装软件

32 位 Ubuntu 依赖 apt 包管理器,首次使用建议更新软件源:

# 更新软件源列表
apt update

# 安装常用工具(示例:安装 vim 编辑器、wget 下载工具)
apt install -y vim wget

2. 步骤 2:文件操作与持久化验证

利用挂载目录 ./root 实现文件持久化:

# 在容器内 /root 目录创建测试文件
cd /root
echo "这是容器内创建的文件" > test.txt

# 退出容器(执行 exit 命令)
exit

# 在本地部署目录查看文件(验证同步)
cat ./root/test.txt
# 输出“这是容器内创建的文件”,说明文件已同步到本地

3. 步骤 3:运行 32 位程序(核心场景)

若有 32 位二进制程序(如旧版软件 old_app),可复制到本地 ./root 目录,再在容器内运行:

# 本地复制 32位程序到 ./root 目录(假设程序在本地 ~/old_app)
cp ~/old_app ./root/

# 进入容器
docker exec -it ubuntu386 bash

# 容器内运行程序
cd /root
chmod +x old_app  # 赋予执行权限
./old_app  # 运行 32位程序

4. 步骤 4:设置自定义环境(可选)

可在容器内修改 .bashrc 配置别名、环境变量等,修改会同步到本地 ./root/.bashrc

# 容器内编辑 .bashrc
vim /root/.bashrc

# 添加别名(如 ll 代替 ls -l)
echo "alias ll='ls -l'" >> /root/.bashrc

# 生效配置
source /root/.bashrc

# 测试别名:执行 ll 会显示详细文件列表
ll

🔄 维护与管理

  1. 停止服务 在项目目录下,执行以下命令来停止正在运行的容器。 bash docker-compose down 这将停止并移除容器。

  2. 重新启动服务 之后如果需要再次启动容器,依然使用 docker-compose up -d。由于数据卷的挂载,你之前存储在 /root 下的数据不会丢失。

  3. 更新镜像 如果需要获取最新的 i386/ubuntu 镜像,可以执行: bash docker-compose pull 然后使用 docker-compose up -d 重新启动服务,Docker Compose 会使用新拉取的镜像创建容器。

  4. 备份数据 需要备份的数据主要存放在宿主机上的 ./root 目录。定期备份整个项目目录即可。

🐛 常见问题排查

问题现象 可能原因与解决方案
容器启动后立即退出 1. 检查 docker-compose.yml 文件语法是否正确,特别是缩进。
2. 确认 i386/ubuntu 镜像是否拉取成功。可尝试手动拉取:docker pull i386/ubuntu
无法通过 exec 进入容器 1. 确认容器正在运行 (docker-compose ps)。
2. 检查命令是否正确,确保在 docker-compose.yml 文件所在目录执行。
容器内命令输出乱码 1. 确认 docker-compose.yml 中的 LANGLC_ALL 环境变量已正确设置为 C.UTF-8
2. 在容器内尝试执行 export LANG=C.UTF-8 临时设置。
宿主机上看不到持久化数据 1. 确认 volumes 挂载路径是否正确。
2. 检查执行 docker-compose 命令的当前目录是否正确。
无法安装软件包 (apt-get update 失败) 1. 检查容器内的网络连接是否正常。
2. 可能是 Ubuntu 官方软件源网络问题,可以尝试更换为国内镜像源(如清华源、阿里云源等)。

希望这篇教程能帮助你顺利搭建并管理你的 i386 Ubuntu 环境!如果在部署和使用过程中遇到更多问题,Docker 官方文档和相关的社区论坛是寻求帮助的好去处。


🐛 常见问题排查2

1. 无法进入容器终端(docker exec 失败)

  • 原因 1:容器未运行(State 为 Exited)。解决:重启容器:docker compose restart

  • 原因 2:未配置 stdin_open: true 或 tty: true解决:检查配置文件,确保两项均为 true,重启容器:docker compose down && docker compose up -d

2. 中文显示乱码(如 ls 中文文件名显示问号)

  • 原因:环境变量 LANG 或 LC_ALL 未正确设置为 C.UTF-8

    解决: 1. 检查配置文件 environment 部分,确保包含 LANG=C.UTF-8 和 LC_ALL=C.UTF-8; 2. 重启容器:docker compose restart; 3. 进入容器后执行 locale,确认输出包含 LANG=C.UTF-8

3. 容器内文件未同步到本地 ./root

  • 原因 1:挂载目录权限不足(容器无写入权限)。解决:重新赋予权限:sudo chmod -R 777 ./root,重启容器。

  • 原因 2:文件存储路径不在 /root 目录下(如 /home 或 /tmp)。解决:容器内操作文件时,确保路径在 /root 下(如 /root/documents),才能同步到本地。

4. 启动容器提示 “架构不支持”(ARM 主机)

  • 原因i386/ubuntu 是 32 位 x86 架构镜像,ARM 架构(如树莓派)默认不支持。

    解决:在 ARM 主机上启用 32 位 x86 模拟(需 Docker 支持 binfmt_misc):

    # 安装模拟工具(仅 ARM 架构)
    sudo apt install -y qemu-user-static
    # 重启 Docker 生效
    sudo systemctl restart docker
    # 重新启动容器
    docker compose up -d

通过以上步骤,新手可快速部署 32 位 Ubuntu 容器,用于兼容旧软件、测试或学习。该容器的核心优势是 “隔离性” 与 “轻量性”,无需改动主机系统即可获取纯净的 32 位环境,适合各类临时或长期的 32 位应用场景。