首页 > 解决方案 > 使用 Docker chown 容器目录 (ubuntu - mysql/mysql-server)

问题描述

我正在尝试使用 /var/lib/mysql/ 目录实例化一个 mysql 容器,该目录具有适当的权限和所有权,以便从我的旧 mysql 服务器 COPY 绑定 sql 转储。但是由于 /var/lib/mysql/ 拥有其权限和所有权,容器在挂载时退出。所以我试图在实例化容器时改变这个目录的权限和所有权。但这被证明是困难的......

目标:rwxr-xr-x mysql:root /var/lib/mysql

配置:

  1. Dockerfile: FROM mysql/mysql-server
    RUN chmod 755 /var/lib/mysql
    RUN chown -R mysql:root /var/lib/mysql/

  2. 图像:存储库标签图像 ID 创建大小
    wat 1.0 09edc2e9d91d 大约一小时前 381MB
    mysql/mysql-server 最新 716286be47c6 2 个月前 381MB

  3. docker-compose.yml:版本:“3”
    服务:
    mysqlmysql-server:
    图像:wat:1.0
    container_name:mysqlmysql-server

加工 ...

$ docker ps
CONTAINER ID 图像命令创建的状态端口名称
b21339cf2986 wat:1.0 "/entrypoint.sh mysq..." 11 分钟前 11 分钟前(健康)3306/tcp,33060/tcp mysqlmysql-server

b21339cf2986# ls /var/lib -al | grep -e mysql$
drwxr-x--- 7 mysql mysql 4096 Jun 27 04:06 mysql

这是错误的。我现在至少期待 rwxr-xr-x 和/或 mysql:root

拆解/广场 1 ##

$ sudo 码头工人停止 *; 须藤码头rm *;sudo 码头工人图像 rmi *; sudo docker pull mysql/mysql-server
$ sudo docker build --tag wat:1.0 - < mysqlmysql-server/Dockerfile-mysqlmysql-server
成功构建 2a38f54299d8
成功标记 wat:1.0
$ sudo docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
wat 1.0 2a38f54299d8 大约一分钟前 381MB
mysql/mysql-server 最新 716286be47c6 2 个月前 381MB

$ sudo docker-compose up -d
$ sudo docker ps
CONTAINER ID 图像命令创建状态端口名称
b94f9e776d78 wat:1.0 "/entrypoint.sh mysq..." 大约一分钟前 Up 59 seconds (healthy) 3306/tcp, 33060/tcp mysqlmysql-server

$ sudo docker exec -it b94f9e776d78 bash
bash-4.2# ls /var/lib -al | grep -e ql$ drwxr-x--- 6 mysql mysql 4096 Jun 27 04:27 mysql

以上是错误的

目标:rwxr-xr-x mysql:root /var/lib/mysql

标签: dockerdocker-composedockerfile

解决方案


Docker Hubmysql/mysql-server镜像声明了一个VOLUME /var/lib/mysql. 这意味着后续的 Dockerfile 步骤不能对该目录进行任何进一步的更改

在实践中,您几乎总是将自己的存储挂载在该目录上。当您这样做时,该存储(主机目录或 Docker 命名卷)的内容和权限将隐藏 Dockerfile 所做的任何事情。Docker Hubmysql镜像页面有“以任意用户身份运行”的说明,这将允许您使用与主机目录所有者匹配的用户 ID 运行容器;这些说明可能适用于您使用的备用图像,也可能不适用。


推荐阅读