podman映射windows本地目录,出现mysqld: Cannot change permissions of the file ‘ca.pem‘ 导致mysql容器启动不成功

podman 映射windows本地目录,运行docker-compose.yml启动MySQL容器

services:
  mysql:
    image: mysql:8.0.32
    container_name: mysql8
    restart: unless-stopped
    environment:
      - MYSQL_ROOT_PASSWORD=1234ksdk
      - TZ=Asia/Shanghai
    networks:
      - default
    ports:
      - '3306:3306'
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf/my.cnf:/etc/my.cnf

出现:不能设置ca.pem权限错误,导致MySQL容器启动失败。

mysqld: Cannot change permissions of the file 'ca.pem' (OS errno 1 - Operation not permitted)
 [ERROR] [MY-010295] [Server] Could not set file permission for ca.pem

原因是:
podman和docker不一样,docker是默认以root权限运行的,这也是docker一直被诟病有安全风险的原因,而podman是rootless 普通用户运行,所以会出现权限不足的问题。

MySQL 进程需要以 root 权限模式运行,才能从podman machine虚拟机操作windows主机文件系统(请注意,在rootful的root权限模式下,MySQL进程可以在Windows文件系统下写入ca.pem,但在尝试更改 ca.pem 的文件权限时会失败)。如果不想以rootful(root 权限模式)运行podman machine虚拟机,可以使用podman machine虚拟机文件系统作为 MySQL 数据文件夹(在这种情况下需要将虚拟挂载卷标记z,如 -v /tmp/mysql_data:/var/lib/mysql:z):

解决方法有两种:

1、不使用Windows本地文件系统作为挂载卷,使用podman machine的虚拟文件

> podman machine ssh mkdir /tmp/mysql_data
> podman run --name mysql-container -e MYSQL_ROOT_PASSWORD=my_sql_pwd -d -p 3306:3306 -v /tmp/mysql_data:/var/lib/mysql:z mysql:latest

2、使用Windows本地文件系统作为挂载卷,将podman machine设置成rootful模式,使podman获得root权限并且挂载卷不能标记为z,同时设置--user 1000:1000

在 Docker 中,z 和 Z 是用于配置 SELinux 标签 的选项,主要用于绑定挂载(Bind Mounts)时的安全性管理。这些选项会影响主机文件或目录的 SELinux 标签,从而控制容器对挂载内容的访问权限。

z 和 Z 的区别

z 选项:表示挂载的内容可以在多个容器之间共享。Docker 会将挂载内容标记为共享标签,允许所有容器对其进行读写操作。
Z 选项:表示挂载的内容是私有的,且仅供单个容器使用。Docker 会将挂载内容标记为非共享标签,确保其他容器无法访问。

podman machine stop && podman machine set --rootful && podman machine start
podman run --name mysql-container --user 1000:1000 -e MYSQL_ROOT_PASSWORD=my_sql_pwd -d -p 3306:3306 -v /tmp/mysql_data:/var/lib/mysql mysql:latest

docker-compose.yml中设置用户为1000 user: '1000:1000'

services:
  mysql:
    image: mysql:8.0.32
    container_name: mysql8
    restart: unless-stopped
    user: '1000:1000'
    environment:
      - MYSQL_ROOT_PASSWORD=1234ksdk
      - TZ=Asia/Shanghai
    networks:
      - default
    ports:
      - '3306:3306'
    volumes:
      - ./mysql/data:/var/lib/mysql
      - ./mysql/conf/my.cnf:/etc/my.cnf
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值