🚀 使用 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.环境要求
确保你的服务器已安装 Docker 和 Docker Compose。你可以通过在终端执行 docker -v 和 docker 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: true 和 tty: true 是保证我们可以交互式使用这个容器的关键。
* 数据持久化:volumes 部分将容器内的 /root 目录(用户主目录)挂载到宿主机的 ./root 目录下。这样,即使在容器被删除后,/root 目录下的文件(如 bash 历史、配置文件等)依然保留在宿主机上。
* 字符编码:环境变量 LANG=C.UTF-8 和 LC_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
🔄 维护与管理
-
停止服务 在项目目录下,执行以下命令来停止正在运行的容器。
bash docker-compose down这将停止并移除容器。 -
重新启动服务 之后如果需要再次启动容器,依然使用
docker-compose up -d。由于数据卷的挂载,你之前存储在/root下的数据不会丢失。 -
更新镜像 如果需要获取最新的
i386/ubuntu镜像,可以执行:bash docker-compose pull然后使用docker-compose up -d重新启动服务,Docker Compose 会使用新拉取的镜像创建容器。 -
备份数据 需要备份的数据主要存放在宿主机上的
./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 中的 LANG 和 LC_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 位应用场景。