首页 > 解决方案 > 启动命令 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

请问,你能解释一下为什么不考虑文件中添加的信息吗?

先感谢您

标签: dockercommanddocker-image

解决方案


这里发生了两件不同的事情。

在容器内部,一个服务器进程正在运行,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(请记住,第二个端口号必须与容器内的服务器正在使用的端口匹配)您应该发现在主机上运行的进程可以访问容器,但在其他主机上运行的进程将无法访问。


推荐阅读