繁体   English   中英

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

[英]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 已经创建

补充说明 -

  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 日志中一无所获。

任何帮助表示赞赏。 谢谢。

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

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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM