Postgres 可作为 docker 镜像使用dockerhub/postgres。配置很容易通过环境变量完成,但它们也声明
警告:仅当您使用空的数据目录启动容器时,Docker 特定变量才会产生效果;任何预先存在的数据库在容器启动时都不会受到影响。
这让我怀疑这样的 Dockerfile 是否存在安全风险
FROM postgres
COPY *.sql /docker-entrypoint-initdb.d/
以及像这样的 docker-compose.yml
database:
build:
context: ./database/
dockerfile: ./Dockerfile
environment:
POSTGRES_PASSWORD: test123
ports:
- 5432:5432
volumes:
- databasevol:/var/lib/postgresql/data
networks:
- net
volumes:
databasevol:
driver: local
networks:
net:
driver: bridge
这将重建当前数据库映像,postgres:latest
这可能导致数据库由版本 12.4 初始化,但稍后由版本 13.0 读取。 DBMS 可能会将数据目录识别为已损坏并清除它,这让我感到恐惧。
因此问题是,在 docker 容器中运行数据库是否安全?
答案1
我建议不要使用 postgres:latest,而是指定您想要的主版本(即 postgres:12)。
在更新 DBMS 时,没有可靠的 DBMS 会删除您的数据库,但是它可能会拒绝启动(PostgreSQL 也是如此)。
你可以相当安全地(无论如何都要有备份)通过列出的任何方法切换主要版本时升级集群官方文档。
答案2
通过 docker 运行的数据库可能会出现一些小的性能问题,但其他方面没有什么不同。
但是您绝不应该在生产环境中使用“最新”作为您的图像标签;这就像打开自动更新一样!