Docker 在终端上运行带有表的 MysQL 容器,但不带有 docker-compose.yml

Docker Runs MysQL Container With Tables On Terminal, But Not With docker-compose.yml

所以我正在尝试 运行 一个 Mysql docker 带有一些表设置的容器。看起来当我使用以下命令在终端上执行此操作时,我能够访问 mysql 终端并访问创建的表。 Dockerfileinitial.sql 创建表的文件在同一文件夹中:

FROM mysql:5.7.30

ENV MYSQL_DATABASE football_simulation
ENV MYSQL_ROOT_PASSWORD password
ENV MYSQL_USER alee
ENV MYSQL_PASSWORD anotherpassword
ADD initial.sql /docker-entrypoint-initdb.d

EXPOSE 3306

Docker 命令:

docker build -t test/SNAPSHOT .
docker run --name footysimdb -p3308:3306 -d test/SNAPSHOT
docker exec -it footysimdb /bin/bash

登录到 mysql 终端并访问表:

mysql -ualee -panotherpassword
use football_simulation;
show tables;

这很好。我现在正在尝试使用 docker-compose.yml 来简化它。但是,运行ning docker-compose up 在同一目录中 docker-compose.yml 上不起作用:

version: '3'

services:

        mysql-development:
                image: mysql:5.7.30
                environment:
                        MYSQL_ROOT_PASSWORD: password
                        MYSQL_DATABASE: football_simulation
                        MYSQL_USER: alee
                        MYSQL_PASSWORD: anotherpassword
                ports:
                - "3308:3306"
                volumes:
                        - initial.sql  /docker-entrypoint-initdb.d/

        admin:
                image: adminer
                ports:
                - "8080:8080"

数据库 football_simulation 可在端口 8080 上访问,但表未显示。我究竟做错了什么?

你安装不正确。首先你不要使用 : 定界符。此外,您尝试执行此操作的方式看起来 initial.sql 将被解释为命名卷。如果你想将单个文件挂载到容器中的目录 docker-entrypoint-initdb.d - 你应该使用绑定挂载。它看起来像:

./initial.sql:/docker-entrypoint-initdb.d/

因此来自当前上下文的 initial.sql 文件将作为 initial.sql 文件通过绑定安装安装到 /docker-entrypoint-initdb.d 目录中。

您可以在 offical docs 中阅读不同类型的卷。