只需使用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:~/docker$ grep docker /etc/group
docker:x:101:futur
在上/下移动docker-compose之后,我看到目录的奇怪更改权限:
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”和“视频”?那是什么?正常吗?
这种行为会阻止我(用户“ futur”)复制和移动目录“ mysql_dir”。
我应该仅从root用户使用docker吗?有什么方法可以避免使用root用户来使用docker?
答案 0 :(得分:0)
如果您在主机上运行training
,以检查容器中docker exec <your_container> stat /var/lib/mysql
文件夹的权限,那么您将看到其uid为/var/lib/mysql
(用户27
)和gid为mysql
(组27
):
mysql
在主机和容器之间装载卷时,Docker会根据容器内部的内容(此处为 File: '/var/lib/mysql'
Size: 4096 Blocks: 8 IO Block: 4096 directory
...
Access: (0750/drwxr-x---) Uid: ( 27/ mysql) Gid: ( 27/ mysql)
...
,uid=27
)更改主机上已装载目录的权限。
从主机上看到的结果是正常的:gid=27
是因为您的主机上没有使用27
的用户,并且您看到uid=27
组是因为该组具有video
在主机上(您可以通过运行gid=27
进行验证)。
您可以更改容器内的getent group video
uid和gid以匹配主机上的uid和gid,但是我强烈建议您不要这样做。例如,如果要备份数据,则最好使用volumes,而不是装入本地目录。