二丫讲梵 二丫讲梵
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)

二丫讲梵

行者常至,为者常成
首页
  • 最佳实践
  • 迎刃而解
  • Nginx
  • Php
  • Zabbix
  • AWS
  • Prometheus
  • Grafana
  • CentOS
  • Systemd
  • Docker
  • Rancher
  • Ansible
  • Ldap
  • Gitlab
  • GitHub
  • Etcd
  • Consul
  • RabbitMQ
  • Kafka
  • MySql
  • MongoDB
  • OpenVPN
  • KVM
  • VMware
  • Other
  • ELK
  • K8S
  • LLM
  • Nexus
  • Jenkins
  • 随写编年
  • 家人物语
  • 追忆青春
  • 父亲的朋友圈
  • 电影音乐
  • 效率工具
  • 博客相关
  • Shell
  • 前端实践
  • Vue学习笔记
  • Golang学习笔记
  • Golang编程技巧
  • 学习周刊
  • Obsidian插件周刊
关于
友链
  • 本站索引

    • 分类
    • 标签
    • 归档
  • 本站页面

    • 导航
    • 打赏
  • 我的工具

    • 备忘录清单 (opens new window)
    • json2go (opens new window)
    • gopher (opens new window)
    • 微信MD编辑 (opens new window)
    • 国内镜像 (opens new window)
    • 出口IP查询 (opens new window)
    • 代码高亮工具 (opens new window)
  • 外站页面

    • 开往 (opens new window)
    • ldapdoc (opens new window)
    • HowToStartOpenSource (opens new window)
    • vdoing-template (opens new window)
GitHub (opens new window)
  • 随写编年

  • 家人物语

  • 追忆青春

  • 父亲的朋友圈

  • 电影音乐

  • 效率工具

    • Windows时代

    • Mac时代

      • 我的Mac应用清单以及系统配置整理
      • 在Mac电脑中使用goland开发go语言的一些技巧
      • Mac电脑iterm中配置neovim入门与实践
      • Mac装机之后终端配置
      • Mac升级了Catalina系统之后根目录变成只读
      • 我的Obsidian入门之旅
      • Iterm2配置session续联
      • Mac电脑m1版本使用VSCODE调试golang项目时遇到的问题
      • Mac电脑m1版本基于docker部署软件时的变化
        • 1,部署 MySQL(此方案废弃)
        • 1,新的拉起 MySQL 方案
        • 2,部署 OpenLdap
        • 3,部署 Jenkins
        • 4,部署 nexus
      • 使用开源虚拟化工具UTM在M1版本的Mac系统中安装配置Windows11系统
      • 使用开源虚拟化工具UTM在M1版本的Mac系统中安装配置CentOS7系统
      • vscode开发前端项目时如何tab补全自定义HTML标签
      • Mac电脑中优秀的讲课直播划线批注软件ScreenBrush详解
      • 结合Multitouch完成我在Mac触摸板上的高效使用
      • brew安装软件的一个报错解决
      • mac电脑安装Java开发环境
      • Mac 电脑中 zsh 环境下配置 docker 命令自动补全
    • 各种插件

    • 优秀工具提名

  • 博客相关

  • 闲言碎语
  • 效率工具
  • Mac时代
二丫讲梵
2022-04-10
目录

Mac电脑m1版本基于docker部署软件时的变化

文章发布较早,内容可能过时,阅读注意甄别。

2022 年 3 月底,个人第三台笔电来到了 Mac-2021-m1 款 14 英寸版本,使用折腾过程中,遇到不少新的架构兼容方面的问题,这里单独记录在本地通过 docker 部署应用时遇到的一些问题。

# 1,部署 MySQL(此方案废弃)

原本通过docker-compose部署MySQL步骤如下。

首先创建配置文件:

$ cat my.cnf

[client]
port = 3306
socket = /var/lib/mysql/data/mysql.sock
[mysqld]
 # 针对5.7版本执行group by字句出错问题解决
sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
 # 一般配置选项
basedir = /var/lib/mysql
datadir = /var/lib/mysql/data
port = 3306
socket = /var/lib/mysql/data/mysql.sock
lc-messages-dir = /usr/share/mysql # 务必配置此项,否则执行sql出错时,只能显示错误代码而不显示具体错误消息
character-set-server=utf8mb4
back_log = 300
max_connections = 3000
max_connect_errors = 50
table_open_cache = 4096
max_allowed_packet = 32M
#binlog_cache_size = 4M
max_heap_table_size = 128M
read_rnd_buffer_size = 16M
sort_buffer_size = 16M
join_buffer_size = 16M
thread_cache_size = 16
query_cache_size = 64M
query_cache_limit = 4M
ft_min_word_len = 8
thread_stack = 512K
#tx_isolation = READ-COMMITTED
tmp_table_size = 64M
#log-bin=mysql-bin
long_query_time = 6
server_id=1
innodb_buffer_pool_size = 1024M
innodb_thread_concurrency = 16
innodb_log_buffer_size = 16M
wait_timeout= 31536000
interactive_timeout= 31536000
lower_case_table_names = 1
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41

然后添加 docker-compose 的主配置文件:

$ cat docker-compose.yaml
version: '3'
services:
  mysql:
    hostname: mysql
    image: mysql:5.7.26
    # network_mode: "host" # 如果需要容器使用宿主机IP(内网IP),则可以配置此项
    container_name: mysql # 指定容器名称,如果不设置此参数,则由系统自动生成
    restart: unless-stopped # 设置容器自启模式
    command: mysqld
    ports:
      - '3306:3306'
    environment:
      - TZ=Asia/Shanghai # 设置容器时区与宿主机保持一致
      - MYSQL_ROOT_PASSWORD=123465 # 设置root密码
    volumes:
       # 数据挂载目录自行修改哦!
       - /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致
       - ./data:/var/lib/mysql/data # 映射数据库保存目录到宿主机,防止数据丢失
       - ./my.cnf:/etc/mysql/my.cnf # 映射数据库配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20

然后执行部署,会发现报了如下错误:

Pulling mysql (mysql:5.7.26)...
5.7.26: Pulling from library/mysql
ERROR: no matching manifest for linux/arm64/v8 in the manifest list entries
1
2
3

那么此时可以将镜像换成mysql/mysql-server:5.7,再次运行,就没问题了。

注意:默认拉起之后,如果想在本地通过工具连接 MySQL,则会遇到如下报错:

Host '172.22.0.1' is not allowed to connect to this MySQL server
1

这是因为 MySQL 默认的用户不允许远程连接访问,可以进行如下配置:

# 进入容器
$ docker exec -it mysql bash

# 登陆MySQL
$ mysql -p123465

# 查看用户
mysql> SELECT host, user FROM mysql.user;
+-----------+---------------+
| host      | user          |
+-----------+---------------+
| localhost | healthchecker |
| localhost | mysql.session |
| localhost | mysql.sys     |
| localhost | root          |
+-----------+---------------+
4 rows in set (0.02 sec)

# 调整权限允许远程
mysql> GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123465' WITH GRANT OPTION;
Query OK, 0 rows affected, 1 warning (0.04 sec)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21

然后再用工具连接就不会报错了。

还有一种方式,可以通过添加环境变量以及指定直接拉起允许远程连接的容器,对应的 yaml 信息如下:

version: "3"

networks:
  go-ldap-admin:
    driver: bridge

services:
  mysql:
    image: mysql/mysql-server:5.7
    container_name: go-ldap-admin-mysql # 指定容器名称,如果不设置此参数,则由系统自动生成
    hostname: go-ldap-admin-mysql
    restart: always # 设置容器自启模式
    ports:
      - "3306:3306"
    environment:
      TZ: Asia/Shanghai # 设置容器时区与宿主机保持一致
      MYSQL_ROOT_PASSWORD: 123456 # 设置root密码
      MYSQL_ROOT_HOST: "%" # 设置允许远程访问
      MYSQL_DATABASE: go_ldap_admin
    volumes:
      # 数据挂载目录自行修改哦!
      - /etc/localtime:/etc/localtime:ro # 设置容器时区与宿主机保持一致
      - ./mysql/data:/var/lib/mysql/data # 映射数据库保存目录到宿主机,防止数据丢失
      - ./mysql/config/my.cnf:/etc/mysql/my.cnf # 映射数据库配置文件
    command: --default-authentication-plugin=mysql_native_password #解决外部无法访问,与上边MYSQL_ROOT_HOST 变量配合使用才能生效。
    networks:
      - go-ldap-admin
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27

# 1,新的拉起 MySQL 方案

原本上边的文档是之前我一直使用的,然而最近上边的方案却无法正常使用了,拉起 MySQL 总是失败。

后来跑到 dockerhub 看了一下,发现 mysql/mysql-server:5.7 镜像竟然没有了 arm 版本的了,而我分明记得,之前是有的,也许是我记错了,总之使用如上方式已无法正常拉起,现在调整拉起方式如下:

$ cat docker-compose.yaml
version: '3'
services:
  mysql:
    image: registry.cn-hangzhou.aliyuncs.com/eryajf/mysql:5.7
    container_name: mysql
    restart: always # 设置容器自启模式
    ports:
      - '3306:3306'
    environment:
      TZ: Asia/Shanghai # 设置容器时区与宿主机保持一致
      MYSQL_ROOT_PASSWORD: 123456 # 设置root密码
    volumes:
      - ./data:/var/lib/mysql
1
2
3
4
5
6
7
8
9
10
11
12
13
14

这个镜像源自于 daocloud.io/library/mysql:5.7,我担心后期镜像有变,因此自己单独 push 了一下,此镜像为公开镜像,大家可以直接使用。

# 2,部署 OpenLdap

原来部署 ldap 都是在 CentOS 中部署的,现在在 Mac-arm 架构系统中,需要注意使用更新的镜像,之前因为使用的 1.2.0,而开源镜像是从 1.3.0 开始支持 arm 架构的,参考issue (opens new window)。

新的启动脚本如下:

$ cat start-eryajf.sh
#!/bin/bash -e

SERVICE=ldap-service-eryajf
HOST_NAME=ldap-server-eryajf
LDAP_DOMAIN=eryajf.net
LDAP_DC=eryajf
LDAP_DC_ORG=net
NETWORK_ADAPTER=eth0
PASSWORD=123465
OPENLDAP="1.5.0"
PHPLDAPADMIN="0.9.0"
HTTPS_PORT=8089
OPENLDAP_PORT=390

docker run \
    -p ${OPENLDAP_PORT}:389 \
    --name ${SERVICE} \
    --hostname ${HOST_NAME} \
    --env LDAP_ORGANISATION="Eyajf-Group" \
    --env LDAP_DOMAIN=${LDAP_DOMAIN} \
    --env LDAP_ADMIN_PASSWORD=${PASSWORD} \
    --detach osixia/openldap:${OPENLDAP}

docker run \
    -p ${HTTPS_PORT}:80 \
    --name ${SERVICE}-admin \
    --hostname ${HOST_NAME}-admin \
    --link ${SERVICE}:${HOST_NAME} \
    --env PHPLDAPADMIN_LDAP_HOSTS=${HOST_NAME} \
    --env PHPLDAPADMIN_HTTPS=false \
    --detach \
    osixia/phpldapadmin:${PHPLDAPADMIN}

sleep 1
echo "-----------------------------------"
PHPLDAP_IP=$(docker inspect -f "{{ .NetworkSettings.IPAddress }}" ${SERVICE})
docker exec ${SERVICE} ldapsearch -x -H ldap://${PHPLDAP_IP}:389 -b "dc=${LDAP_DC},dc=${LDAP_DC_ORG}" -D "cn=admin,dc=${LDAP_DC},dc=${LDAP_DC_ORG}" -w ${PASSWORD}
echo "-----------------------------------"
PUB_IP="localhost"
echo "Go to: https://${PUB_IP}:${HTTPS_PORT}"
echo "Login DN: cn=admin,dc=${LDAP_DC},dc=${LDAP_DC_ORG}"
echo "Password: ${PASSWORD}"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43

然后直接运行即可。

# 3,部署 Jenkins

Jenkins 官方提供的镜像,后来的新版本中,几乎都支持 arm 架构的,因此直接运行即可。

$ cat start.sh
docker run -itd -u root -p 9090:8080 -p 9091:50000 --name jenkins \
--privileged=true --restart always \
-e TZ=Asia/Shanghai \
-v $(which docker):/usr/bin/docker \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /Users/eryajf/software/docker/jenkins/software:/var/software \
-v /Users/eryajf/software/docker/jenkins/home:/var/jenkins_home \
jenkins/jenkins:2.343
1
2
3
4
5
6
7
8
9

根据情况调整你挂在的目录即可,此部署仅作为本地学习研究之用,不作为生产部署参考。

启动完毕之后,直接访问localhost:9090即可,通过docker logs -f jenkins可以看到 Jenkins 运行之后的密码。

# 4,部署 nexus

目前使用官方提供的镜像,在 Mac-m1 上使用没有遇到什么问题,当然也有一些开发者提供了 arm 版本的镜像,如果你遇到问题,获取可以试试他的镜像:nexus3-docker (opens new window)

version: "3"
services:
  nexus:
    image: "sonatype/nexus3"
    container_name: nexus
    restart: always
    environment:
      - TZ=Asia/Shanghai
    ports:
      - "8931:8081"
    volumes:
      - "/Users/eryajf/software/docker-compose/nexus/data:/nexus-data"
1
2
3
4
5
6
7
8
9
10
11
12

服务启动之后,会在数据目录中生成一个 admin.password 的文件,里边存放着初始密码。

微信 支付宝
上次更新: 2024/07/04, 22:40:37
Mac电脑m1版本使用VSCODE调试golang项目时遇到的问题
使用开源虚拟化工具UTM在M1版本的Mac系统中安装配置Windows11系统

← Mac电脑m1版本使用VSCODE调试golang项目时遇到的问题 使用开源虚拟化工具UTM在M1版本的Mac系统中安装配置Windows11系统→

最近更新
01
记录二五年五一之短暂回归家庭
05-09
02
学习周刊-总第210期-2025年第19周
05-09
03
学习周刊-总第209期-2025年第18周
05-03
更多文章>
Theme by Vdoing | Copyright © 2017-2025 | 点击查看十年之约 | 浙ICP备18057030号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式