由于容器里面就一个mysql镜像,没有其他命令。我们先要再宿主机编辑一个list文件传到容器里
或者在宿主机编辑my.cnf直接cp到容器里也是可以的。
vim sources.list
把以下源放入到文件内,也可以放其他的源
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-security main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-updates main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-proposed main restricted universe multiverse
deb-src http://mirrors.ustc.edu.cn/ubuntu/ xenial-backports main restricted universe multiverse
保存退出,再传到容器里,两个容器都要
传送前,检查容器里/etc目录下是否有apt目录。没有则创建,两个容器都要
[root@wang ~]# docker exec -it mysql-master /bin/bash
bash-4.2# mkdir /etc/apt
bash-4.2# exit
[root@wang ~]# docker exec -it mysql-slave /bin/bash
bash-4.2# mkdir /etc/apt
bash-4.2# exit
docker cp sources.list mysql-master:/etc/apt/sources.list
docker cp sources.list mysql-slave:/etc/apt/sources.list
检查基础镜像
首先,确认目标容器的基础镜像类型:
cat /etc/os-release
如果显示是 Alpine Linux,那么需要使用 apk 来管理软件包。
如果是其他发行版(比如 Debian 或 CentOS),则可能需要安装缺少的包管理工具。
- 如果是 Alpine Linux
Alpine 使用 apk 作为包管理工具。可以使用以下命令更新软件包索引并安装工具:
apk update
apk add apt bash coreutils
然后再尝试运行 apt 或其他命令。
- 如果是 Debian 或 Ubuntu
可能基础镜像是极简的,不包含 apt。可以手动安装:
apt-get update
apt-get install -y apt-utils
- 如果是 CentOS
如果确认是 CentOS 或基于 CentOS 的镜像但缺少 yum:
microdnf update
microdnf install yum
- 使用包管理器
修复后,再次尝试更新包或安装所需软件。例如:
apt update
apt install -y vim
或者:
yum update
yum install -y vim
- 建议切换基础镜像
如果你的需求需要完整的包管理支持,考虑更换为常规的 Ubuntu 或 CentOS 基础镜像。例如:
Ubuntu: FROM ubuntu:20.04
CentOS: FROM centos:8