如何使用.sql脚本初始化MYSQL docker容器?

8iwquhpp  于 2023-08-02  发布在  Mysql
关注(0)|答案(1)|浏览(108)

我有一个.sql文件,当我启动容器时,我想运行它来用数据填充DB。我该怎么做?
我的docker脚本如下:
docker-compose.yml

version: '3'
services:
  php:
    build:
      context: .
      dockerfile: Dockerfile
    volumes:
      - ./src:/var/www/
    ports:
      - 8080:80
    depends_on:
      - mysql
  mysql:
    image: mysql:latest
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: mydatabase
      MYSQL_USER: user
      MYSQL_PASSWORD: userpassword
    volumes:
      - mysql_data:/var/lib/mysql
volumes:
  mysql_data:

字符串
Dockerfile

FROM php:8.1-apache
COPY src/ /var/www/


我尝试在我的Dockerfile中使用这行代码

RUN mysql -usecret -pmydatabase mysql < /var/www/DB_Setup.sql


但我得到了错误
/bin/sh:1:mysql:未找到错误:服务'php'无法构建:命令'/bin/sh -c mysql -usecret -pmydatabase mysql < /var/www/DB_Setup.sql'返回非零代码:127
所以我猜这是因为php容器没有安装mysql?
我想我可以使用这样的内容的Dockerfile?但我不知道如何将其添加到docker-compose.yml?来源:here

FROM mysql:latest

MAINTAINER me

ENV MYSQL_DATABASE=mysql \
    MYSQL_ROOT_PASSWORD=mydatabase

ADD script.sql /docker-entrypoint-initdb.d

EXPOSE 3306

  • 谢谢-谢谢
cbeh67ev

cbeh67ev1#

从文档:

初始化新示例

当容器第一次启动时,将创建具有指定名称的新数据库,并使用提供的配置变量初始化。此外,它将执行在/docker-entrypoint-initdb.d中找到的扩展名为.sh.sql.sql.gz的文件。文件将按字母顺序执行。通过将SQL转储装载到mysql目录中,可以轻松地填充mysql服务,并向custom images提供贡献的数据。默认情况下,SQL文件将导入到MYSQL_DATABASE变量指定的数据库中。
所以,你可以添加另一个卷Map到你的mysql容器:

- ./my-init-scripts:/docker-entrypoint-initdb.d/:ro

字符串
其中my-init-scripts是包含composer文件的同一目录中的一个目录。将您的DB_Setup.sql文件移动到my-init-scripts中,它将在您的容器首次启动时运行。

相关问题