我是postgres扩展和docker的新手,我有一些关于如何在Docker上运行的postgres容器上设置它们的问题。我必须创建一个表格,它需要postgis提供的几何类型。我有一个docker-compose文件:
version: '3.8'
services:
test-db:
image: postgres
restart: always
ports:
- '5434:5432'
environment:
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: testdb
volumes:
- ./database/postgres:/data
我的Dockerfile目前看起来像这样:
# Development Build
FROM node:12.18.3-alpine3.12 as builder
LABEL maintainer="person <person@person.com>"
RUN apk update && apk add --no-cache make git
WORKDIR /usr/src/app
ARG NPM_TOKEN
COPY package*.json ./
RUN true
COPY package-lock.json ./
RUN true
COPY .npmrc /root/.npmrc
RUN npm i && rm /root/.npmrc && npm run postinstall; exit 0
COPY . .
RUN npm run build:all
我也试着按照this教程,但当遇到错误的第5步。
我也试着遵循this Stackoverflow问题的第二个答案。但是当我尝试运行docker pull kartoza/postgis:image_version
时,我得到了一个错误Error response from daemon: manifest for kartoza/postgis:image_version not found: manifest unknown: manifest unknown
。
如果我安装了postgis并在dockerfile和docker compose上定义了它,而其他人运行了我的代码,他们也需要下载postgis吗?
1条答案
按热度按时间ioekq8ef1#
这是我的建议。
只支持PostgreSQL和Postgis
假设您在Linux或Mac上,使用
mkdir gis
创建一个名为gis
的目录,并通过执行cd gis
进入该目录。创建名为
Dockerfile.pg
的文件。创建一个名为
gis.sh
的文件,其中包含:创建名为
docker-compose.yml
的文件然后执行
docker compose up -d
。这将使用您的Dockerfile.pg来:
它将创建一个容器并将其命名为
gis
它将挂载一个名为
pg
的命名卷,以便您可以轻松识别该卷。它将运行gis.sh,在登录PostgreSQL后,它将创建一个名为postgis的扩展。
执行
docker image ls
时,您将看到一个gis
图像。执行
docker container ls
时,它会显示运行的容器名。您可以使用
docker exec -it gis /bin/bash
登录到容器,您将看到您可以通过执行以下操作来验证是否已添加扩展:
使用完容器后,可以使用
docker compose down -v
删除容器。-v
也将删除卷。提示您的应用,如果您想与PostgreSQL沿着运行
虽然我不知道你的应用程序是如何工作的,但你可能想尝试这样做来打开你的数据库和应用程序。调整你认为合适的。
在
gis
目录中,现在有3个文件:添加另一个名为
Dockerfile
的文件-这是您的应用程序的Dockerfile。将docker-compose.yml更改为:
然后可以运行
docker compose up -d
并查看输出。这里有一个博客可以帮助你:https://michalzalecki.com/docker-compose-for-nodejs-and-postgresql/