[英]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.