我有一个.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
型
- 谢谢-谢谢
1条答案
按热度按时间cbeh67ev1#
从文档:
初始化新示例
当容器第一次启动时,将创建具有指定名称的新数据库,并使用提供的配置变量初始化。此外,它将执行在
/docker-entrypoint-initdb.d
中找到的扩展名为.sh
,.sql
和.sql.gz
的文件。文件将按字母顺序执行。通过将SQL转储装载到mysql
目录中,可以轻松地填充mysql
服务,并向custom images提供贡献的数据。默认情况下,SQL文件将导入到MYSQL_DATABASE
变量指定的数据库中。所以,你可以添加另一个卷Map到你的mysql容器:
字符串
其中
my-init-scripts
是包含composer文件的同一目录中的一个目录。将您的DB_Setup.sql
文件移动到my-init-scripts
中,它将在您的容器首次启动时运行。