![](/img/trans.png)
[英]Can't create db in docker-entrypoint-initdb.d with mysql docker container
[英]docker-entrypoint-initdb.d is empty when container is started from within another container
我有一个目录结构,如 -
- Dockerfile
- docker-compose.yml
- db
- schema.sql
每个文件的内容是 -
Dockerfile -
FROM alpine:3.7
RUN apk update && \
apk add --no-cache docker python3 && \
apk add --no-cache --virtual .docker-compose-deps python3-dev libffi-dev openssl-dev gcc libc-dev make && \
pip3 install docker-compose && \
apk del .docker-compose-deps
ADD . .
docker-compose.yml -
version: "2"
services:
test_mysql:
image: "mysql:5.7"
container_name: test_mysql_v1
volumes:
- ./db:/docker-entrypoint-initdb.d/
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3310:3306"
schema.sql -
create database if not exists db2;
当我做 -
docker-compose up --build --remove-orphans
它的行为符合预期,我在test_mysql_v1容器中得到了一个名为db2的数据库。
但是,当我这样做时 -
1. docker build -t dfd_1 .
2. docker run -v /var/run/docker.sock:/var/run/docker.sock -it dfd_1 sh
from inside -
3. docker-compose up --build --remove-orphans
然后在新创建的test_mysql_v1容器中,docker -entrypoint-initdb.d目录为空(未创建数据库)。
有人可以帮助如何完成这项工作吗?
最终结果应该是 - 当我从dfd_1容器内部向上运行docker-compose 时,它应该创建一个 mysql 容器,其中db 已经创建。
补充说明 -
为了降低 mysql 容器,我使用 - docker-compose down
我的猜测是当我执行docker run -v /var/run/docker.sock:/var/run/docker.sock...
时,我需要另一个卷挂载以便docker-compose.yml (在dfd_1内)可以将db复制到docker-entrypoint-initdb.d正确。
从 docker 日志中一无所获。
任何帮助表示赞赏。 谢谢。
通过将主机目录上的路径传递给其中的容器来实现它。
将docker 运行命令更改为 -
docker run -v /var/run/docker.sock:/var/run/docker.sock -e HOST_DIR=$PWD -it dfd_1 sh
docker-compose.yml (映射卷时使用HOST_DIR 环境变量)为 -
version: "2"
services:
test_mysql:
image: "mysql:5.7"
container_name: test_mysql_v1
volumes:
- ${HOST_DIR}/db:/docker-entrypoint-initdb.d/
environment:
- MYSQL_ROOT_PASSWORD=root
ports:
- "3310:3306"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.