如何将我的 PostgreSQL 数据移动到 Docker 容器中?
How do I move my PostgreSQL data into Docker container?
我正在使用 PostgreSQL 创建一个简单的 Spring 启动应用程序。我使用 'docker-compose up' 创建了 2 个图像和容器,我还使用 Flyway 将我的数据库 table 迁移到容器中。
问题是如何移动我的数据或如何在我的 Docker 容器应用程序上访问本地计算机上的数据库数据?
我 运行 我在 Docker 容器上的应用程序并使用 Get HTTP 方法但没有数据。我返回一个空 JSON,而如果我 运行 它不使用 Docker 我得到数据。也许有人知道我如何迁移数据或以某种方式访问我存储在本地计算机上的数据?
我的 docker-compose.yaml 文件如下所示:
version: '3.8'
services:
app:
container_name: docker-meetings
image: docker_meetings
build: ./
ports:
- "8082:8080"
depends_on:
- postgresqldb
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgresqldb:5432/meetingsdb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&stringtype=unspecified
- SPRING_DATASOURCE_USERNAME=postgres
- SPRING_DATASOURCE_PASSWORD=DB
- SPRING_JPA_HIBERNATE_DDL_AUTO=none
postgresqldb:
image: postgres
restart: always
ports:
- "5432:5432"
volumes:
- ./Program Files/PostgreSQL/14/data
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=DB
- POSTGRES_DB=meetingsdb
- PGDATA=./Program Files/PostgreSQL/14/data
volumes:
postgresqldb: {}
我的 Docker 文件如下所示:
FROM openjdk:11
ADD target/visma-meeting-app-withdb-0.0.1-SNAPSHOT.jar visma-meeting-app-withdb-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","visma-meeting-app-withdb-0.0.1-SNAPSHOT.jar"]
可能是卷的问题
volumes:
- ./Program Files/PostgreSQL/14/data
你可以试试这个,数据将存储在本地机器的 ./pgdata 中,并存储在 docker 容器中的 postgres 中。
db:
image: "postgres:12.6-alpine"
container_name: db
ports:
- "5432:5432"
environment:
- POSTGRES_USER={POSTGRES_USER}
- POSTGRES_PASSWORD={POSTGRES_PASSWORD}
volumes:
- ./pgdata:/var/lib/postgresql/data
restart: always
重新使用您已经拥有的用于直接安装在计算机中的本地 postgresql 的相同存储是可能的(我不确定)。可能两个 postgresql 必须具有完全相同的版本,另外你只能同时安装一个 运行。
尽管如此,推荐的方法是拥有两个不同的存储空间,每个安装一个。然后,如您所说,您需要从您的计算机中的原始数据库中导出数据,并将其导入到您的容器数据库中。
您可以使用 pgadmin 或 pgdump 来做到这一点。也许对用户更友好的方法是使用 pgadmin。您可以从连接到本地 (not-containerized) postgresql 和容器化 postgresql 的本地安装的 pgadmin 执行此操作。
为了轻松访问它们,您需要将容器化 postgresql 使用的端口映射到与 non-container postgresql 使用的端口不同的本地端口。为此,您可能想要更改 5432:5432 默认映射(如果您的其他 postgresql 已经在使用该端口)。
然后,如果您可以远程访问它们,则可以配置 pgadmin 以管理这两个数据库,export-import 任务与任何其他两个 postgresql 安装相同。
我正在使用 PostgreSQL 创建一个简单的 Spring 启动应用程序。我使用 'docker-compose up' 创建了 2 个图像和容器,我还使用 Flyway 将我的数据库 table 迁移到容器中。
问题是如何移动我的数据或如何在我的 Docker 容器应用程序上访问本地计算机上的数据库数据?
我 运行 我在 Docker 容器上的应用程序并使用 Get HTTP 方法但没有数据。我返回一个空 JSON,而如果我 运行 它不使用 Docker 我得到数据。也许有人知道我如何迁移数据或以某种方式访问我存储在本地计算机上的数据?
我的 docker-compose.yaml 文件如下所示:
version: '3.8'
services:
app:
container_name: docker-meetings
image: docker_meetings
build: ./
ports:
- "8082:8080"
depends_on:
- postgresqldb
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://postgresqldb:5432/meetingsdb?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true&stringtype=unspecified
- SPRING_DATASOURCE_USERNAME=postgres
- SPRING_DATASOURCE_PASSWORD=DB
- SPRING_JPA_HIBERNATE_DDL_AUTO=none
postgresqldb:
image: postgres
restart: always
ports:
- "5432:5432"
volumes:
- ./Program Files/PostgreSQL/14/data
environment:
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=DB
- POSTGRES_DB=meetingsdb
- PGDATA=./Program Files/PostgreSQL/14/data
volumes:
postgresqldb: {}
我的 Docker 文件如下所示:
FROM openjdk:11
ADD target/visma-meeting-app-withdb-0.0.1-SNAPSHOT.jar visma-meeting-app-withdb-0.0.1-SNAPSHOT.jar
ENTRYPOINT ["java","-jar","visma-meeting-app-withdb-0.0.1-SNAPSHOT.jar"]
可能是卷的问题
volumes:
- ./Program Files/PostgreSQL/14/data
你可以试试这个,数据将存储在本地机器的 ./pgdata 中,并存储在 docker 容器中的 postgres 中。
db:
image: "postgres:12.6-alpine"
container_name: db
ports:
- "5432:5432"
environment:
- POSTGRES_USER={POSTGRES_USER}
- POSTGRES_PASSWORD={POSTGRES_PASSWORD}
volumes:
- ./pgdata:/var/lib/postgresql/data
restart: always
重新使用您已经拥有的用于直接安装在计算机中的本地 postgresql 的相同存储是可能的(我不确定)。可能两个 postgresql 必须具有完全相同的版本,另外你只能同时安装一个 运行。
尽管如此,推荐的方法是拥有两个不同的存储空间,每个安装一个。然后,如您所说,您需要从您的计算机中的原始数据库中导出数据,并将其导入到您的容器数据库中。
您可以使用 pgadmin 或 pgdump 来做到这一点。也许对用户更友好的方法是使用 pgadmin。您可以从连接到本地 (not-containerized) postgresql 和容器化 postgresql 的本地安装的 pgadmin 执行此操作。
为了轻松访问它们,您需要将容器化 postgresql 使用的端口映射到与 non-container postgresql 使用的端口不同的本地端口。为此,您可能想要更改 5432:5432 默认映射(如果您的其他 postgresql 已经在使用该端口)。
然后,如果您可以远程访问它们,则可以配置 pgadmin 以管理这两个数据库,export-import 任务与任何其他两个 postgresql 安装相同。