Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么docker使用“mysql转储文件”的权限编写文件&引用;_Mysql_Docker_Docker Compose - Fatal编程技术网

为什么docker使用“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

我正在尝试使用以下命令在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-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