从另一个容器中启动容器时,docker-entrypoint-initdb.d为空

问题描述

我有一个目录结构-

- 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容器。 >。

其他说明-

  1. 要关闭mysql容器,我使用-docker-compose down

  2. 我的猜测是,当我执行docker run -v /var/run/docker.sock:/var/run/docker.sock ...时,我需要另一个卷挂载,以便 docker-compose.yml (在 dfd_1 内部)正确地将 db 复制到 docker-entrypoint-initdb.d

  3. 泊坞窗日志中什么也没有。

感谢您的帮助。谢谢。

解决方法

通过将主机目录上的路径传递到其中的容器来实现。

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"

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...