gpt4 book ai didi

docker - Postgres部署中的env var无法正常工作

转载 作者:行者123 更新时间:2023-12-02 20:43:38 24 4
gpt4 key购买 nike

首先,我非常确定我知道为什么这行不通:我先拉Docker postgres:11-alpine镜像,对其进行修改,然后尝试在自定义镜像上更改k8s env:中的deployment.yaml。我认为这就是问题所在。

基本上,我正在尝试根据Docker postgres docs完成此任务:

docker run --name some-postgres -e POSTGRES_PASSWORD='foo' POSTGRES_USER='bar'

这就是我所拥有的:

Dockerfile.dev
FROM postgres:11-alpine
EXPOSE 5432
COPY ./db/*.sql /docker-entrypoint-initdb.d/

postgres.yaml (在完成此操作后, secret 将被移动)
apiVersion: apps/v1
kind: Deployment
metadata:
name: postgres-deployment
spec:
replicas: 1
selector:
matchLabels:
component: postgres
template:
metadata:
labels:
component: postgres
spec:
containers:
- name: postgres
image: testproject/postgres
ports:
- containerPort: 5432
env:
- name: POSTGRES_DB
value: "test_dev"
- name: POSTGRES_USER
value: "bar"
- name: POSTGRES_PASSWORD
value: "foo"
volumeMounts:
- name: postgres-storage
mountPath: /var/lib/postgresql/data
subPath: postgres
volumes:
- name: postgres-storage
persistentVolumeClaim:
claimName: postgres-storage
---
apiVersion: v1
kind: Service
metadata:
name: postgres-cluster-ip-service
spec:
type: ClusterIP
selector:
component: postgres
ports:
- port: 5432
targetPort: 5432

但是,当我使用Skaffold在本地启动集群时,由于我仍然可以使用默认的 env:POSTGRES_USER=postgres访问数据库,因此 POSTGRES_PASSWORD=''“不接受”。

我敢打赌,如果我做了 image: postgres,那么 env:就可以了,但是我不确定如何做与Dockerfile中的等效:
COPY ./db/*.sql /docker-entrypoint-initdb.d/

有什么建议吗?

如果有帮助的话,下面是 skaffold.yaml:
apiVersion: skaffold/v1beta15
kind: Config
build:
local:
push: false
artifacts:
- image: testproject/postgres
docker:
dockerfile: ./db/Dockerfile.dev
sync:
manual:
- src: "***/*.sql"
dest: .
- image: testproject/server
docker:
dockerfile: ./server/Dockerfile.dev
sync:
manual:
- src: "***/*.py"
dest: .
deploy:
kubectl:
manifests:
- k8s/ingress.yaml
- k8s/postgres.yaml
- k8s/server.yaml

最佳答案

Docker postgres docs提及以下内容:

Warning: the Docker specific variables will only have an effect if you start the container with a data directory that is empty; any pre-existing database will be left untouched on container startup.



您确定要从一个空的数据目录开始部署吗?可能是PostgreSQL启动并允许您在第一次使用该持久卷启动它时使用环境变量中指定的凭据登录吗?

如果不是,请查看正在运行的pod的环境变量。 kubectl describe POD应该告诉您哪些环境变量实际上是传递给Pod的。也许Skaffold设置中的某些内容会覆盖环境变量?在Pod中执行时,可以通过运行 env在Pod中进行查看。同样不要忘记日志,PostgreSQL容器应该记录它在启动期间创建的用户帐户。

关于docker - Postgres部署中的env var无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59201376/

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