jpw*_*ynn 7 docker docker-compose
我试图让一个 postgres 容器在不同的端口上运行(5433 而不是默认的 5432),就像这样的几个在线线程:https : //github.com/docker-library/postgres/issues/196#issuecomment-310209118
(端口更改的原因是因为我离开运行的一个不相关的项目已经在使用端口 5432,所以我希望能够在多个项目上同时运行 rspec。)
在我的测试环境中,我有 DATABASE_URL=postgresql://postgres:@db.local:5433/test_agile_self
当我使用端口 5432 时一切正常(在 DATABASE_URL 和 docker-compose.yml 中)
将端口更改为 5433 后,当我运行 rspec 时,我得到:
PG::ConnectionBad:
could not connect to server: Connection refused
Is the server running on host "db.local" (172.22.0.2) and accepting
TCP/IP connections on port 5433?
# ./spec/spec_helper.rb:62:in `block (2 levels) in <top (required)>'
Run Code Online (Sandbox Code Playgroud)
容器似乎确实在端口 5433 和 IP 地址 172.22.0.2 上运行:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
a8f5dee227e8 postgres:10.5 "docker-entrypoint.s…" 27 minutes ago Up 14 seconds 0.0.0.0:5433->5432/tcp zarc_db.local_1
Run Code Online (Sandbox Code Playgroud)
$ docker inspect a8f5dee227e8 | grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.22.0.2",
Run Code Online (Sandbox Code Playgroud)
我的 docker-compose.yml 使用ports: "5433:5432"上面链接的讨论。
#docker-compose.yml
version: '3'
services:
web:
build: .
ports:
- "3010:3010"
volumes:
- .:/my_app
links:
- db.local
depends_on:
- db.local
db.local:
image: postgres:10.5
ports:
- "5433:5432"
Run Code Online (Sandbox Code Playgroud)
如果我在这两个位置(ENV 和 docker-compose.yml)将 5433 改回 5432,它会再次工作。
这是在运行 Mohave 10.14.3 和 Docker 18.09.2 的 Mac 上
Mar*_*bel 18
在容器内部,因此在DATABASE_URL端口中需要保持相同的docker-compose5432。
ports:
- "5433:5432"
Run Code Online (Sandbox Code Playgroud)
您可以在您的文件中docker-compose添加以下内容:(长语法)
ports:
- target: 80
published: 8080
protocol: tcp
mode: host
Run Code Online (Sandbox Code Playgroud)
在哪里,
- target : 容器内的端口
- Publication : 公开暴露的端口
- 协议:端口协议(tcp 或 udp)
- mode:用于在每个节点上发布主机端口的主机,或用于要负载平衡的集群模式端口的入口。
或者单行:(短语法)
ports:
- "4040:5432" # HOST:CONTAINER
Run Code Online (Sandbox Code Playgroud)
在哪里,
- 4040是HOST上要公开的端口
- 5432是容器上暴露的端口
笔记:
使用低于 60 的容器端口时,您可能会遇到错误结果,因为 YAML 将 xx:yy 格式的数字解析为以 60 为基数的值。因此,我们建议始终将端口映射显式指定为字符串。
| 归档时间: |
|
| 查看次数: |
10384 次 |
| 最近记录: |