M1/M2芯片的mac虚拟机docker安装mysql

文章讲述了在M1或M2芯片的Mac上使用ParallelsDeskTop虚拟机运行Ubuntu,然后在Ubuntu中安装docker并尝试安装mysql:5.7时遇到的架构不匹配问题。解决方案是通过添加--platform参数指定容器的平台为linux/x86_64。此外,文章还介绍了位运算符的基本概念和用法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

说明

mac的M1 M2芯 arm64架构。楼主为了构造开发环境,在mac安装了虚拟机(Parallels DeskTop)。在虚拟机上安装了Ubuntu系统。在系统上安装了docker(菜鸟教程搜索docker安装能看到各种环境的安装方法:推荐国内镜像的自动安装)。在docker安装mysql的时候遇到问题

docker获取指定版本的容器镜像


执行安装命令:

docker pull mysql:5.7

得到了不太友好的反馈:

root@ubuntu-linux-22-04-desktop:/home# docker pull mysql:5.7
5.7: Pulling from library/mysql
no matching manifest for linux/arm64/v8 in the manifest list entries

于是微调一下

获取指定架构版本容器

docker pull --platform linux/x86_64 mysql:5.7

如果你是Mac苹果电脑,并且在Docker上运行某个应用,则可以尝试如下解决方式。

启动命令加入 --platform linux/amd64 即可


TIP

位运算

运算符是把数字看作二进制来进行计算

a 为 60,b 为 13二进制格式如下:

a = 0011 1100

b = 0000 1101



a&b = 0000 1100

a|b = 0011 1101

a^b = 0011 0001

~a  = 1100 0011
运算符描述实例
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 ,二进制解释: 0000 1100
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。(a | b) 输出结果 61 ,二进制解释: 0011 1101
^按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符:数据存储补码 取反后得出的原码数值。(~a ) 输出结果 -61 。推导过程。
<<左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111
a = 60  # 60 = 0011 1100
b = 13  # 13 = 0000 1101
c = 0

c = a & b;  #  0000 1100  4+8 = 12
print("1 - c 的值为:", c)

c = a | b;  # 0011 1101  1+4+8+16+32 = 61
print("2 - c 的值为:", c)

c = a ^ b;  # 49 = 0011 0001  1+16+32 =49
print("3 - c 的值为:", c)

c = ~a;
#1100 0011      (-1) 64 32 16    8 4 2 1
print("4 - c 的值为:", c)

c = a << 2;  # 240 = 1111 0000
print("5 - c 的值为:", c)

c = a >> 2;  # 15 = 0000 1111
print("6 - c 的值为:", c)
1 - c 的值为: 12
2 - c 的值为: 61
3 - c 的值为: 49
4 - c 的值为: -61
5 - c 的值为: 240
6 - c 的值为: 15
### 安装 MySQL 8.0 on Docker #### 下载并安装 Docker 版本MySQL 8.0 为了在 Docker 中运行 MySQL 8.0 数据库,首先需要拉取官方镜像: ```bash docker pull mysql:8.0 ``` 这会从 Docker Hub 获取最新的 MySQL 8.0 镜像[^1]。 #### 设置 MySQL 的环境变量与启动容器 创建一个新的 Docker 容器来运行 MySQL 并设置必要的环境变量。这些变量用于定义 root 用户密码和其他初始化参数: ```bash docker run --name some-mysql \ -e MYSQL_ROOT_PASSWORD=my-secret-pw \ -d mysql:8.0 ``` 上述命令中的 `MYSQL_ROOT_PASSWORD` 是用来设定 MySQL root 用户的初始登录密码。 #### 创建自定义网络以便其他服务连接到 MySQL 对于更复杂的部署场景,比如 Nacos 和 MySQL 协同工作时,则可能希望为它们建立一个共享的 Docker 网络以简化互联配置: ```bash docker network create docker-ubuntu-net ``` 之后可以通过指定此网络名称让新创建的服务加入其中[^2]: ```bash docker run --name some-nacos --network=docker-ubuntu-net ... docker run --name some-mysql --network=docker-ubuntu-net ... ``` #### 持久化存储数据卷 为了避免因容器重启而导致的数据丢失问题,推荐使用 Docker Volumes 或者绑定挂载的方式来进行持久化的数据管理。这里展示如何通过 `-v` 参数将宿主机上的路径映射给容器内的 `/var/lib/mysql` 目录作为数据库文件的位置: ```bash mkdir -p /opt/datas/docker/mysql/data docker run --name some-mysql \ -v /opt/datas/docker/mysql/conf:/etc/mysql/conf.d \ -v /opt/datas/docker/mysql/data:/var/lib/mysql \ ... ``` 这样做的好处是可以确保即使删除了容器本身也不会影响已经保存下来的数据[^4]。 #### 使用 Navicat 连接至 MySQL 实例 当尝试利用图形界面工具如 Navicat 来访问位于 Docker 内部运行着的 MySQL 服务器时,可能会遇到一些权限或端口转发方面的问题。解决方法之一就是确保正确设置了外部可访问的端口号,并允许来自客户端 IP 地址范围内的请求到达目标容器内部监听的服务端口上。通常做法是在启动容器时加上 `-p` 参数完成端口映射操作: ```bash docker run ... -p 3306:3306 ... ``` 另外还需要确认防火墙规则以及 SELinux (如果适用的话) 是否阻止了相应的流量传输过程。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

溜达的大象

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值