Để chỉ tải các tệp sql của bạn trong lần chạy đầu tiên:
Bạn có thể sử dụng tệp soạn thảo dưới đây
version: '2.1'
services:
usermanagement-service:
build: ./UserManagementService
restart: on-failure
ports:
- "7778:7778"
depends_on:
mysqldb:
condition: service_healthy
mysqldb:
image: mysql
volumes:
- ./mysql-data:/var/lib/mysql
- ./mysql-init-files:/docker-entrypoint-initdb.d
restart: always
environment:
MYSQL_ROOT_PASSWORD: root
MYSQL_DATABASE: userdb
MYSQL_USER: testuser
MYSQL_PASSWORD: testuser
ports:
- "3600:3306"
healthcheck:
test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
timeout: 20s
retries: 10
Bạn phải đặt data.sql
của mình và schema.sql
các tệp trong ./docker-entrypoint-initdb.d
thư mục sử dụng Volumes
để biết thêm thông tin
.
Các tệp SQL trong thư mục này sẽ chỉ được tải nếu thư mục dữ liệu của DB trống (lần chạy dịch vụ db đầu tiên) . (tức là) trong trường hợp của bạn ./mysql-data
thư mục phải trống
Đối với vấn đề thứ hai của bạn:
Thay vì sử dụng wait-for-it.sh
, bạn có thể sử dụng healthcheck
và service_healthy
. Tại đây usermanagement-service
sẽ được bắt đầu sau khi mysqldb
thực thi thành công ["CMD", "mysqladmin" ,"ping", "-h", "localhost"]
trong khoảng thời gian xác định. Để biết thêm chi tiết về kiểm tra sức khỏe và phụ thuộc, hãy tham khảo tại đây .
Đã có test
lệnh từ tại đây
.