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

时间:2019-10-02 15:48:50

标签: postgresql docker kubernetes dockerfile 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使我可以将数据持久存储在本地卷上。

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

我很难理解的更大问题是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

回购协议,如果有帮助,我可以作为参考:https://github.com/StephenGrider/DockerCasts/tree/master/complex

1 个答案:

答案 0 :(得分:2)

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

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