问题描述
我有一个目录结构-
- 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 up 时,它应该使用已创建的 db 创建一个mysql容器。 >。
其他说明-
-
要关闭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 run 命令更改为-
docker run -v /var/run/docker.sock:/var/run/docker.sock -e HOST_DIR=$PWD -it dfd_1 sh
和 docker-compose.yml (在映射体积时使用 HOST_DIR env变量)为-
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"