docker部署各类应用容器过程中遇到的问题整理(持续更新)

本文详述了Docker环境下MySQL容器启动时权限问题的解决办法,包括修改宿主机目录权限以匹配容器内用户ID,及如何处理配置文件冲突确保数据持久化。同时,介绍了Harbor仓库配置过程中,使用HTTP协议时的注意事项与解决方案。

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

一、在docker run 新建mysql 容器的时候,由于容器里mysql 相关的数据文件的从属都是用户mysql,官方镜像里,mysql用户的id为999,且容器里的root用户只是普通用户的身份,非超级管理员,没有权限对挂载的宿主机的数据目录的文件进行写入修改操作,若直接启动mysql容器会失败,查看日志(docker logs -f CONTAINER_ID)会提示挂载的目录权限拒绝(PERMISSION DENIED),所以启动容器前需要把宿主机需要挂载的数据目录的从属改为用户999所有(chown -R 999 /mount_volume),这里不直接修改为mysql所有,是因为宿主机和容器的mysql用户id未必相同。

二、已验证,在mysql5.7.28中,docker启动mysql后自带的配置文件位置为/etc/mysql/mysql.conf.d,里面有一个默认的配置文件mysql.cnf 指定了数据库实例的数据存放目录datadir=/var/lib/mysql,以及若干的配置,经测试发现/etc/mysql/mysql.conf.d/mysql.cnf中的配置优先级较高,会覆盖/etc/mysql/conf.d目录下的配置文件my.cnf的相同配置项,所以如果需要docker映射或添加自定义配置文件my.cnf,则需要删除或者注释/etc/mysql/mysql.conf.d/mysql.cnf中的相关配置。或者直接使用默认的数据目录datadir=/var/lib/mysql映射到宿主机上以实现数据持久化。(注:可前往https://hub.docker.com/搜索相关镜像使用说明,或者在启动容器后,使用docker inspect CONTAINER_ID 查看容器挂载目录情况。)

三、安装harbor的时候若web入口使用HTTP协议访问,则在配置文件harbor.yml里的hostname设置为IP地址访问,已验证,若hostname使用域名,则在后续登陆到仓库Registry的时候(docker login A.B.C.D),会提示所提供的hostname的域名无法解析,故无法访问。在使用IP登陆到docker仓库之前,需要在配置文件/etc/docker/daemon.json里加入"insecure-registries":["A.B.C.D"],由于是JSON格式的数据注意用逗号分隔开,之后先运行docker-compose down -v(注意运行时需要和harbor.yml文件在同一目录下)停止harbor生态实例,然后运行prepare脚本让harbor.yml里修改后的配置生效,然后运行docker-compose up -d启动harbor即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值