在 k8s/Skaffold 中为 Postgres 容器映射本地卷和端口绑定

Mapping local volume and port binding for Postgres container in k8s/Skaffold

我的印象是不能将以下命令的等效项放入 DockerfileDockerfile.dev:

docker run -p 5432:5432 -v /home/app/database/db-files:/var/lib/postgresql/data sockpuppet/database

我用来绑定到本地端口的 -p 5432:5432 这样我就可以使用 pgAdmin 连接到 Postgres。这不是绝对要求,但很高兴拥有。 也许有更好的方法?

-v /home/app/database/db-files:/var/lib/postgresql/data 这样我就可以在本地卷上保存数据。

问题是 EXPOSEDockerfile 中,据我所知,只是打开容器之间的端口。 DockerfileVOLUME 的问题在于它仅指图像的文件系统。

我很难理解的更大问题是 Skaffold skaffold.yaml 在 运行 连接容器时引用这些 Dockerfile`Dockerfile.dev`:

apiVersion: skaffold/v1beta2
kind: Config
build:
  local:
    push: false
  artifacts:
    - image: sockpuppet/client
      context: client
      docker:
        dockerfile: Dockerfile.dev
      sync:
        '**/*.js': .
        '**/*.css': .
        '**/*.html': .
    - image: sockpuppet/server
      context: server
      docker:
        dockerfile: Dockerfile.dev
      sync:
        '**/*.js': .
deploy:
  kubectl:
    manifests:
      - k8s/client-deployment.yaml
      - k8s/server-deployment.yaml
      - k8s/server-cluster-ip-service.yaml
      - k8s/client-cluster-ip-service.yaml

那么,如果无法在 Dockerfile 中指定,我应该如何绑定端口和映射卷?每次我想启动数据库时只需要手动 运行 docker run -p 5432:5432 -v /home/app/database/db-files:/var/lib/postgresql/data ishraqiyun77/database 吗?

如果有帮助,我正在使用 Repo 作为参考:https://github.com/StephenGrider/DockerCasts/tree/master/complex

skaffold.yaml 可以帮助构建和部署 k8s。如果您想进行端口公开和卷映射,您应该在 manifests 部分的各种 .yaml 文件中进行。 Dockerfile 中的 EXPOSE 关键字只是告诉新创建的图像允许公开和转发哪些端口;只有在您的 k8s 容器中,您才真正将端口和卷映射到主机。

披露:我是一名 EnterpriseDB (EDB) 员工