我正在尝试使每个这样的几个在线线程在不同的端口(5433而不是默认的5432)上运行一个postgres容器: https://github.com/docker-library/postgres/issues/196#issuecomment-310209118
(端口更改的原因是因为我离开运行的不相关项目已经在使用端口5432,所以我希望能够在多个项目上同时运行rspec。)
在我的测试ENV中,我有 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)>'
该容器确实确实在端口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
$ docker inspect a8f5dee227e8 | grep "IPAddress"
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.22.0.2",
根据上面的链接,我的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"
如果我在这两个位置(ENV和docker-compose.yml)将5433改回到5432,它将再次起作用。
这是在运行Mohave 10.14.3和Docker 18.09.2的Mac上
答案 0 :(得分:3)
在容器内部,因此在$('.area li').on('click', function () {
document.getElementById('displayValue').value =
this.options[this.selectedIndex].text;
document.getElementById('idValue').value = this.options[this.selectedIndex].text;
})
中,端口需要保持不变5432。在DATABASE_URL
中,您仅使用给定的端口将现有端口5432映射为外界5543。
docker-compose
答案 1 :(得分:1)
在您的docker-compose
中,您可以添加以下内容:(长语法)
ports:
- target: 80
published: 8080
protocol: tcp
mode: host
在哪里
- 目标:容器内的端口
- 已发布:已公开的端口
- 协议:端口协议(tcp或udp)
- 模式:用于在每个节点上发布主机端口的主机,或用于输入群集模式端口以平衡负载的主机。
或者单行:(短语法)
ports:
- "4040:5432" # HOST:CONTAINER
在哪里
- 4040是要在主机上暴露的端口
- 5432的端口暴露在容器上
注意:
当使用低于60的容器端口时,您可能会遇到错误的结果,因为YAML会将xx:yy格式的数字解析为以60为底的值。因此,我们建议始终将端口映射明确指定为字符串。