postgresql - 如何解释 docker compose 文件中的数据库卷条目
问题描述
我正在设置我的第一个 postgresql docker 容器,作为使用 docker compose 的分布式应用程序的一部分,并且对 compose 文件的语法有些困惑。对 docker 来说还是很新的,所以如果这是直接从 docker 101 出来的,请原谅我。
这是我在 docker-compose.yml 中的 postgres 容器的样子:
version: '2'
services:
database:
image: postgres
container_name: database-container-name
environment:
- POSTGRES_PASSWORD=some_password_here
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- PGDATA=/var/lib/postgresql/data/db-files/
ports:
- 5433:5432
volumes:
- ./.db/data:/var/lib/postgresql/data:delegated
- ./.db/init:/docker-entrypoint-initdb.d
这volumes
一点让我陷入了循环。有人可以解释那里发生了什么,容器是否将其/.db/data/
文件夹映射到我的本地/var/lib/postgresql/data
文件夹?我查看了一些文档,但没有深入了解。
另外,在上面的端口部分,有什么处理5433:5432
?这是否意味着我的端口 5433 映射到 docker 容器的端口 5432?如果是这样,这是否意味着如果我在我的盒子上的端口 5433 上连接到 psql 或 pgAdmin,它会默默地映射到 docker 容器中的 postgresql 实例?
解决方案
卷位让我陷入了循环。有人可以解释那里发生了什么,容器是否将其 /.db/data/ 文件夹映射到我的本地 /var/lib/postgresql/data 文件夹?
在volumes
您的服务部分,您正在主机和容器之间database
创建几个绑定挂载。每个卷条目的语法(在这种情况下)是HOST_PATH:CONTAINER_PATH:OPTIONS
. 所以当你看到:
- ./.db/data:/var/lib/postgresql/data:delegated
docker-compose.yml
您正在将本地(到您的).db/data
目录映射到/var/lib/postgresql/data
容器中。换句话说,在一个目录中所做的更改将在另一个目录中可见。
该delegated
选项特定于 MacOS;文档说:
delegated
: 容器运行时对挂载的看法是权威的。在容器中所做的更新在主机上可见之前可能会有延迟。
您的volume
服务部分对应于以下-v
选项docker run
;docker run
除了我上面链接的绑定安装文档之外,您可能会在文档中发现更有趣的内容。
另外,在上面的端口部分,5433:5432 是怎么回事?这是否意味着我的端口 5433 映射到 docker 容器的端口 5432?如果是这样,这是否意味着如果我在我的盒子上的端口 5433 上连接到 psql 或 pgAdmin,它会默默地映射到 docker 容器中的 postgresql 实例?
该ports
部分用于在您的主机上发布端口。语法是HOST_PORT:CONTAINER_PORT
. 所以当你看到:
- 5433:5432
这是将主机端口映射5433
到容器端口5432
。换句话说,您可以通过连接到5433
主机上的端口来连接到您的 postgres 数据库。如果您的主机上已经运行了一个 postgres 实例,这可能是为了避免冲突,该实例已经绑定到端口 5432。
推荐阅读
- javascript - React - 动态输出 SVG 组件
- javascript - 无法从 JSFiddle 向博主显示源代码
- c# - 无法使用反射访问受保护的属性
- tensorflow - TF 2.2 精度和召回率在训练和验证中总是返回零
- reactjs - React,渲染前调用函数
- dragonruby-game-toolkit - 在 DragonRuby Game Toolkit 中如何处理碰撞?
- mongodb - 如何通过将数据作为参数传递来过滤 unix 时间戳来查询 mongodb
- bash - 需要帮助在循环中合并 csv 文件
- python - CONCAT 和 DELETE nan 在每一行中,并将结果放在另一列中
- azure - Azure Blob 存储 - 按标签获取 Blob 不起作用