为什么docker使用“mysql转储文件”的权限编写文件&引用;
我正在尝试使用以下命令在docker compose中运行mysql容器:为什么docker使用“mysql转储文件”的权限编写文件&引用;,mysql,docker,docker-compose,Mysql,Docker,Docker Compose,我正在尝试使用以下命令在docker compose中运行mysql容器: version: "3.3" services: mysql: image: "mysql:8.0.3" volumes: # files are executed in alphabetical order - ./test/data/music_schema.sql:/docker-entrypoint-initdb.d/1-musi
version: "3.3"
services:
mysql:
image: "mysql:8.0.3"
volumes:
# files are executed in alphabetical order
- ./test/data/music_schema.sql:/docker-entrypoint-initdb.d/1-music_schema.sql
- ./test/data/beatles.sql:/docker-entrypoint-initdb.d/2-beatles.sql
这样做的目的是在容器启动后执行这些.sql文件,并将数据加载到数据库中。
这些文件已正确装入,如:我可以在容器中看到它们,但它们显示了奇怪的权限(即所有感叹号):
不管怎样,数据确实加载到了数据库中,因此显然mysql入口点并不真正关心这些文件是如何装入的,因为它正在执行这些文件:
mysql> use music;
Database changed
mysql> show tables;
+-----------------+
| Tables_in_music |
+-----------------+
| Album |
| Artist |
| Membership |
| Songwriter |
| Track |
+-----------------+
5 rows in set (0.00 sec)
因此,数据确实已加载。我在macos Catalina做这件事
奇怪的是,我在另一台Ubuntu服务器上尝试了完全相同的事情(相同的docker compose,相同的文件,基本上是repo的克隆),这些文件不是作为??装载的,而是作为目录装载的:
ls -lha /docker-entrypoint-initdb.d/
total 16K
drwxr-xr-x 1 root root 4.0K May 2 06:12 .
drwxr-xr-x 1 root root 4.0K May 2 06:12 ..
drwxr-xr-x 2 root root 4.0K May 2 05:26 1-music-schema.sql
drwxr-xr-x 2 root root 4.0K May 2 05:26 2-beatles.sql
当然,这并没有将任何数据加载到mysql服务器中,并且容器在ubuntu中崩溃
为什么会这样?如何指定将文件装入文件而不是将文件装入目录?我在这里遵循了其他答案,在我看来,我的做法是正确的,但可能我遗漏了其他东西。我需要指定绝对路径而不是相对路径。回答:这里有更好的解释:
ls -lha /docker-entrypoint-initdb.d/
total 16K
drwxr-xr-x 1 root root 4.0K May 2 06:12 .
drwxr-xr-x 1 root root 4.0K May 2 06:12 ..
drwxr-xr-x 2 root root 4.0K May 2 05:26 1-music-schema.sql
drwxr-xr-x 2 root root 4.0K May 2 05:26 2-beatles.sql