我的印象是,以下命令的等效内容不能放入Dockerfile
或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
使我可以将数据持久存储在本地卷上。
据我所知,问题是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
答案 0 :(得分:2)
skaffold.yaml
可以帮助构建和部署k8s
。如果要进行端口公开和卷映射,则应在.yaml
部分的各个manifests
文件中进行。 EXPOSE
中的Dockerfile
关键字只是告诉新创建的映像允许暴露和转发哪些端口;实际上,只有在k8s
容器中,您才进行端口和卷到主机的映射。
披露:我是一名EnterpriseDB (EDB)员工