gpt4 book ai didi

mysql - 在docker compose上执行SQL脚本

转载 作者:行者123 更新时间:2023-11-29 15:37:09 24 4
gpt4 key购买 nike

我有一个项目,当 ./entrypoint.sh 或 docker-compose up 从项目的根目录运行时运行并生成 swagger API 接口(interface),但调用返回条目响应没有数据。

如果我在没有 docker 的本地主机上运行 MySQL,则工作得很好。我如何加载数据?

入口点.sh

#!/bin/bash

docker network create turingmysql
docker container run -p 3306:3306 --name mysqldb --network turingmysql -e MYSQL_ROOT_PASSWORD=root -e MYSQL_DATABASE=tshirtshop -d mysql:5.7
docker-compose build
docker-compose up

Docker 文件

FROM mysql:5.7

ADD ./database/tshirtshop.sql /docker-entrypoint-initdb.d
#### Stage 1: Build the application
FROM openjdk:8-jdk-alpine as build

# Set the current working directory inside the image
WORKDIR /app

# Copy maven executable to the image
COPY mvnw .
COPY .mvn .mvn

# Copy the pom.xml file
COPY pom.xml .

# Build all the dependencies in preparation to go offline.
# This is a separate step so the dependencies will be cached unless
# the pom.xml file has changed.
RUN ./mvnw dependency:go-offline -B

# Copy the project source
COPY src src


# Package the application
RUN ./mvnw package -DskipTests
RUN mkdir -p target/dependency && (cd target/dependency; jar -xf ../*.jar)

#### Stage 2: A minimal docker image with command to run the app
FROM openjdk:8-jre-alpine

ARG DEPENDENCY=/app/target/dependency

# Copy project dependencies from the build stage
COPY --from=build ${DEPENDENCY}/BOOT-INF/lib /app/lib
COPY --from=build ${DEPENDENCY}/META-INF /app/META-INF
COPY --from=build ${DEPENDENCY}/BOOT-INF/classes /app

ENTRYPOINT ["java","-cp","app:app/lib/*","com.turing.ecommerce.TuringApplication"]

docker-compose.yml

version: '3.7'

# Define services
services:
# App backend service
app-server:
# Configuration for building the docker image for the backend service
build:
context: .
dockerfile: Dockerfile
ports:
- "8080:8080" # Forward the exposed port 8080 on the container to port 8080 on the host machine
restart: always
depends_on:
- mysqldb # This service depends on mysql. Start that first.
environment: # Pass environment variables to the service
SPRING_DATASOURCE_URL: jdbc:mysql://mysqldb:3306/tshirtshop?useSSL=false&useLegacyDatetimeCode=false&serverTimezone=UTC
SPRING_DATASOURCE_USERNAME: root
SPRING_DATASOURCE_PASSWORD: root
networks: # Networks to join (Services on the same network can communicate with each other using their name)
- turingmysql

# Database Service (Mysql)
mysqldb:
image: mysql:5.7
ports:
- "3306:3306"
restart: always

environment:
MYSQL_DATABASE: tshirtshop
MYSQL_USER: root
MYSQL_ROOT_PASSWORD: root
volumes:
- db-data:/var/lib/mysql

networks:
- turingmysql


# Volumes
volumes:
db-data:

# Networks to be created to facilitate communication between containers
networks:
turingmysql:

最佳答案

你有两个 Dockerfile 吗?看起来你构建了自己的 MySQL 容器?

否则,这些不应该成为您的Java多阶段构建的一部分

FROM mysql:5.7

ADD ./database/tshirtshop.sql /docker-entrypoint-initdb.d
<小时/>

假设您确实为 mysql 构建了一个单独的镜像,在 Docker-Compose 中,您没有使用它,因为您仍然引用 image: mysql:5.7

您应该将 SQL 脚本安装到其中,而不是构建自己的脚本

例如

  mysqldb:
image: mysql:5.7
...
volumes:
- db-data:/var/lib/mysql
- ./database/tshirtshop.sql:/docker-entrypoint-initdb.d/0_init.sql

然后,暂时忘记 Java 服务,并使用 MySQL Workbench 或 mysql CLI 来验证数据是否确实存在。完成后,启动 API

关于mysql - 在docker compose上执行SQL脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58126590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com