我正在创建一个mysql5.7docker容器,并希望在容器启动时创建和填充一个数据库。
首先,dockerfile:
FROM mysql:5.7
VOLUME /var/lib/mysql-files
ADD ./scripts/kdd_db_create_tables.sql /docker-entrypoint-initdb.d/kdd_db_create_tables.sql
下一步,内容 kdd_db_create_tables.sql
:
DROP DATABASE IF EXISTS cdl;
CREATE DATABASE cdl;
USE cdl;
DROP TABLE IF EXISTS kdd;
CREATE TABLE kdd (
duration BIGINT,
protocol_type TEXT,
..
class TEXT);
LOAD DATA LOCAL INFILE '/var/lib/mysql-files/kdd_dataset.csv' INTO TABLE kdd FIELDS TERMINATED BY ',';
ALTER TABLE kdd ADD id INT NOT NULL AUTO_INCREMENT PRIMARY KEY;
最后,docker编写文件:
---
version: '3.5'
services:
mysql:
image: ericsson/mysql5.7:latest
networks:
- cdl_net
ports:
- 3306:3306
hostname: mysql
container_name: mysql
volumes:
- ./mysql/data:/var/lib/mysql-files
environment:
MYSQL_ROOT_PASSWORD: cdl
MYSQL_USER: cdl
MYSQL_PASSWORD: cdl
MYSQL_DATABASE: cdl
networks:
cdl_net:
driver: bridge
name: cdl_net
文件结构如下:
|-- docker-compose.yml
|-- mysql
|-- Dockerfile
|-- data
| |-- kdd_dataset.csv
|-- scripts
|-- kdd_db_create_tables.sql
也就是说,sql脚本在 ./mysql/scripts
,而数据集处于 ./mysql/data
. 在容器执行时,sql脚本在文件夹中可用 /docker-entrypoint-initdb.d
在容器中,当数据集处于 /var/lib/mysql-files
(作为 LOAD DATA INFILE
要求文件位于所述文件夹中)。但是,在运行容器时,出现以下错误:
ERROR 13 (HY000) at line 50: File '/var/lib/mysql-files/kdd_dataset.csv' not found (Errcode: 13 - Permission denied)
你知道我做错了什么吗?
2条答案
按热度按时间yduiuuwa1#
我在这里遇到了同样的问题,这就是我为解决这个问题所做的。
1) 道克档案
2) 容器启动脚本(database.sh)
3) 用法:
在终端中,执行以下步骤:
4xy9mtcn2#
嗯,问题似乎在于我的房子是由我的(内部)基础设施提供商提供的。在我家里不可能装任何东西
改用/tmp