只需使用docker-Compose.yaml创建数据库服务:
# another db service for test
version: '3.5'
networks:
dockernet:
driver: bridge
services:
db:
image: mysql/mysql-server:5.5.62
restart: on-failure
environment:
MYSQL_ROOT_PASSWORD: 123456
volumes:
- ./mysql_dir:/var/lib/mysql
networks:
- dockernet
接下来,在我的~中添加目录“mysql”:
docker:~/docker$ ls -l
total 8
-rw-r--r-- 1 futur futur 674 Nov 5 04:35 docker-compose.yaml
drwxr-sr-x 2 futur futur 4096 Nov 5 04:37 mysql_dir
我把我的帐户添加到‘码头’组:
docker:~/docker$ grep docker /etc/group
docker:x:101:futur
在我的停靠-撰写之后,我看到我的目录的权限发生了奇怪的变化:
docker:~/docker$ ls -l
total 8
-rw-r--r-- 1 futur futur 298 Nov 5 05:10 docker-compose.yaml
drwxr-sr-x 5 27 video 4096 Nov 5 05:11 mysql_dir
为什么会变成“27”和“视频”?那是什么?这正常吗?
这种行为可以防止我复制和移动目录'mysql_dir‘(用户'futur')。
我应该只使用根用户的停靠器吗?有什么方法可以避免使用root用户吗?
发布于 2018-11-05 12:10:05
如果在您的主机上运行docker exec <your_container> stat /var/lib/mysql
,检查容器中/var/lib/mysql
文件夹的权限,那么您将看到它的uid是27
(用户mysql
),gid是27
(组mysql
):
File: '/var/lib/mysql'
Size: 4096 Blocks: 8 IO Block: 4096 directory
...
Access: (0750/drwxr-x---) Uid: ( 27/ mysql) Gid: ( 27/ mysql)
...
当您在主机和容器之间挂载卷时,Docker根据容器内部的内容更改已挂载目录的权限(此处为uid=27
、gid=27
)。
您从主机上看到的是正常的:27
是因为您的主机上没有任何uid=27
用户,而video
组是因为这个组在您的主机上有gid=27
(您可以通过运行getent group video
来验证这一点)。
您可以更改容器中的mysql
uid和gid,以匹配主机上的容器,但我强烈建议您不要这样做。例如,如果您想备份数据,而不是挂载本地目录,您宁愿使用卷。
https://stackoverflow.com/questions/53151126
复制相似问题