docker - 启动命令 docker-compose up 有奇怪的行为
问题描述
这里使用文件 docker-compose.yml 的内容来创建数据库的图像。
version: '2'
services:
myerp.db:
image: postgres:10
当我启动命令 docker-compose up 时,我得到:
Pulling myerp.db (postgres:10)...
10: Pulling from library/postgres
802b00ed6f79: Already exists
4e0de21e2180: Already exists
58b06ac4cd84: Already exists
14e76b354b47: Already exists
0f0c9f244b65: Already exists
37117d8abb6d: Already exists
8b541f5d818a: Already exists
7cb4855fcd96: Already exists
5c7fe264586b: Already exists
64568a495c35: Already exists
283257efa745: Already exists
222b134fa51d: Already exists
e9a30e7f2a9f: Already exists
86bffc7855b0: Already exists
Digest: sha256:1d26fae6c056760ed5aa5bb5d65d155848f48046ae8cd95c5b26ea7ceabb37ad
Status: Downloaded newer image for postgres:10
Starting dev_myerp.db_1 ... done
Attaching to dev_myerp.db_1
myerp.db_1 | 2018-09-23 10:27:38.647 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
myerp.db_1 | 2018-09-23 10:27:38.647 UTC [1] LOG: listening on IPv6 address "::", port 5432
myerp.db_1 | 2018-09-23 10:27:38.653 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
myerp.db_1 | 2018-09-23 10:27:38.682 UTC [21] LOG: database system was shut down at 2018-09-23 10:16:13 UTC
myerp.db_1 | 2018-09-23 10:27:38.708 UTC [1] LOG: database system is ready to accept connections
我注意到当我将这些行添加到 docker-compose.yml 时:
ports:
- "127.0.0.1:9432:5433"
volumes:
# - "./data/db:/var/lib/postgresql/data"
- "./init/db/docker-entrypoint-initdb.d:/docker-entrypoint-initdb.d"
environment:
- POSTGRES_DB=db_myerp
- POSTGRES_USER=user
- POSTGRES_PASSWORD=usr
我总是“0.0.0.0”而不是 127.0.0.1。
Attaching to dev_myerp.db_1
myerp.db_1 | 2018-09-23 10:27:38.647 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
myerp.db_1 | 2018-09-23 10:27:38.647 UTC [1] LOG: listening on IPv6 address "::", port 5432
myerp.db_1 | 2018-09-23 10:27:38.653 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
myerp.db_1 | 2018-09-23 10:27:38.682 UTC [21] LOG: database system was shut down at 2018-09-23 10:16:13 UTC
myerp.db_1 | 2018-09-23 10:27:38.708 UTC [1] LOG: database system is ready to accept connections
请问,你能解释一下为什么不考虑文件中添加的信息吗?
先感谢您
解决方案
这里发生了两件不同的事情。
在容器内部,一个服务器进程正在运行,docker-compose
日志是该服务器进程的输出。 服务器进程必须设置网络连接以侦听 0.0.0.0,否则将无法访问。 它对 Docker 环境知之甚少,并且不知道诸如 Compose YAML 文件中的端口映射之类的事情;它通常由命令行选项或环境变量控制。(因此您引用的日志消息应该始终显示“0.0.0.0”,否则您的容器将无法工作。)
在容器之外,Docker 将指定端口上的入站连接路由到特定容器。这就像在主机上运行的任何其他服务一样:您在此处提供的 IP 地址可以是主机拥有的任何单个地址(在这种情况下,它只能通过匹配的网络接口访问)或神奇的“到处监听”地址 0.0。 0.0(默认)。
使用docker run -p 127.0.0.1:9432:5432
(请记住,第二个端口号必须与容器内的服务器正在使用的端口匹配)您应该发现在主机上运行的进程可以访问容器,但在其他主机上运行的进程将无法访问。
推荐阅读
- python - python xlsxwriter 导出数据框并将图表绘制到一个excel中的不同选项卡
- ios - 如果从现有 App Store 版本更新,Firebase Cloud Messaging 将无法接收消息
- python - 在 Python 中重试装饰器
- javascript - 响应式导航栏菜单在移动浏览器上不起作用
- javascript - 万事达支付网关 checkout.js 方法未触发完整的回调函数
- flutter - 如何在 Flutter 中的 OnChange 事件中清除 Textfield 并将焦点返回到同一个 Textfield 控制器?
- c++ - 重启自己的qt应用
- javascript - 如何将作为请求接收的 JSON 数据传递给外部变量?
- html - 如何在 td 内有 Div 的表中添加 Datatable
- python - 从看似没有统一分隔符的字符串中提取值