1

我的印象是以下命令的等效项不能放入 a Dockerfileor Dockerfile.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据我所知,它只是在容器之间打开端口。VOLUMEin a的问题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

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

如果有帮助,我将回购用作参考:https ://github.com/StephenGrider/DockerCasts/tree/master/complex

4

1 回答 1

2

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

披露:我是EnterpriseDB (EDB)员工

于 2019-10-02T18:30:01.653 回答