我使用mariadb作为mysql docker容器,无法从docker卷上载数据。
我的数据库dockerfile与此链接上发布的文件类似。 https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux_atomic_host/7/html/getting_started_with_containers/install_and_deploy_a_mariadb_container
我不想从上面的链接中的示例中导入数据,而是从docker卷中导入数据。
我确实尝试使用docker-entrypoint.sh示例,在该示例中,我遍历docker-entrypoint-initdb.d中的文件,但这使我收到myssql.sock错误,可能是因为该数据库已经从dockerfile RUN命令中关闭。
database:
build:
context: ./database
ports:
- "3306:3306"
volumes:
- ./data/data.sql:/docker-entrypoint-initdb.d/data.sql
environment:
- MYSQL_DATABASE=hell
- MYSQL_USER=test
- MYSQL_PASSWORD=secret
- MYSQL_ROOT_PASSWORD=secret
答案 0 :(得分:0)
我认为您的问题是这样的:
您想通过挂载卷获得架构,但是在数据库中看不到,对吗?
首先,如果您打算使用mariadb
,则可以使用MariaDB Official Docker Image.
因此,通过这种方式,您避免使用redhat图像或自定义构建。
第二,您正在复制此SQL,但没有运行mysql import o dump或类似的东西。因此,您可以做的是在docker-compose中放置一个命令(例如):
database:
build:
context: ./database
ports:
- "3306:3306"
volumes:
- ./data/data.sql:/docker-entrypoint-initdb.d/data.sql
environment:
- MYSQL_DATABASE=hell
- MYSQL_USER=test
- MYSQL_PASSWORD=secret
- MYSQL_ROOT_PASSWORD=secret
command: "mysql -u username -p database_name < file.sql"
但这不是最好的方法。
另一方面,您可以遵循MariaDB文档,设置装载量,并在首次运行时导入数据。有了该卷,您不必再次运行导入。 这是您必须放置的支架:
/my/own/datadir:/var/lib/mysql
很显然,您可以将sql文件挂载到/ tmp /文件夹中,仅此而已,然后使用docker exec
执行sh并从内部运行它。