Mac使用docker下的两个冷知识

1.Mac下的docker无法直接访问宿主机网络或本地服务

在 macOS 上,Docker 容器无法像 Linux 一样直接访问宿主机网络或某些本地服务,如果我们要访问本地数据库或者本地容器内的数据库该怎么办呢?

我之前使用的是这种方式:

创建了一个wenjunxiao/mac-docker-connector:latest(镜像名称同容器名称)的容器,这个容器的作用就是让容器里的程序可以访问你 Mac 上的服务(反向打通网络)。

通过启动 mac-docker-connector 容器这种方式比较麻烦,虽然可以设置自动启动,但是每次 docker ps 之后看见他总感觉怪怪的,前两天我就不记得这个容器是干嘛用的了。

推荐大家另一种方式:

如果你的两个服务都是容器启动,比如我的nacos要连接mysql,那就让这两个容器加入同一个网络

ps:如果本地已经搭建了docker-compose或者k8s那自然容器都在同一网络下,可以直接通过容器名称互访。

命令如下:

bash 复制代码
# 创建网络
docker network create mdx-net

# mysql8 这个容器加入这个网络
docker network connect mdx-net mysql8

# nacos2.1.2-slim 这个容器加入这个网络
docker network connect mdx-net nacos2.1.2-slim

# 查看加入情况
docker network inspect mdx-net

执行 docker network inspect mdx-net 后如果能看见下图这些内容那就成功了。

然后nacos就可以通过容器名称直接连接mysql了

2.Mac重启导致docker异常中断无法再次启动容器

今天遇见了一个问题,电脑更新系统重启后,docker异常退出了,导致再次启动mysql容器的时候失败了

报错 :

sh 复制代码
chown: changing ownership of '/var/lib/mysql/mysql.sock': No such file or directory

问题原因就是,我的mysql容器挂载了宿主机的data目录,然后在上次容器异常退出的时候容器没有及时清理 mysql.sock 、 *.pid 和临时文件,所以新容器再启动时容易误判或触发权限异常。这些都属于运行时文件,如果容器正常退出大概率是会被清理的。

解决方案:

如果不想删除掉容器映射到主机上的持久化数据的情况下,可以执行如下命令:

bash 复制代码
docker rm -f mysql8
find /Users/jiagang/dev-jag/docker/mysql/data -name '.DS_Store' -delete
rm -f /Users/jiagang/dev-jag/docker/mysql/data/mysql.sock
rm -f /Users/jiagang/dev-jag/docker/mysql/data/*.pid
xattr -dr com.docker.grpcfuse.ownership /Users/jiagang/dev-jag/docker/mysql/data
相关推荐
Java开发追求者13 分钟前
windows快速安装docker
windows·docker·安装·1024程序员节
风别鹤2 小时前
Xcode pod ‘xxx/xxx.h‘ file not found
ide·macos·xcode
骑着蜗牛撵大象3272 小时前
飞牛fnOS部署Damselfly:Compose编排、照片目录与7100固定访问
java·docker·rpc·dubbo·fnos·照片管理·damselfly
一掬净土3 小时前
kubelet 报错如下:docker does not support reopening container log files
docker·云原生·kubelet·logfiles
TTATTC5 小时前
为什么 Python 做 Agent 总在并发中崩溃?拆解 Blockcell 在 Rust 下的 Host-Cell 隔离与自愈状态机
docker·开源
fb_123457 小时前
K8s存储与配置核心实战
云原生·容器·kubernetes
骑着蜗牛撵大象3277 小时前
N1 小盒子撑起 AI 接口中转层:New-API 接管本地 Ollama,用 Token 分发模型能力
docker·llama·1024程序员节·api网关·飞牛nas·new-api
艸肅7 小时前
Docker 国内镜像源配置
linux·ubuntu·docker·1024程序员节
猿粪已尽7 小时前
mac 中 iTerm2 使用 rz、sz 上传下载文件详解,附 scp 操作指南
linux·macos·scp·lrzsz
java_logo7 小时前
Docker 部署 Bililive-go:轻松搭建多平台直播录制
docker·1024程序员节·直播录制·轩辕镜像·bililive-go·chigusa/bililive-go