我尝试实现我的docker-compose文件,但是我的数据库PostgreSQL有一个错误。如果我用npm start开始我的项目,我没有问题。对于使用docker开始我的项目,我使用: docker-compose up && docker-compose build
docker-compose.yml
version: "3"
services:
server:
build: .
container_name: dev-area-2018
ports:
- 8080:8080
depends_on:
- db
db:
image: postgres:latest
ports:
- 5432:5432
environment:
DATABASE_URL: postgres://postgers@db:5432/API
# volumes:
# - /var/lib/postgres/data
client:
build: ./client_web/
container_name: client_web
ports:
- 8081:8081我的输出:
Starting client_web ... done
Starting dev_area_2018_db_1 ... done
Starting dev-area-2018 ... done
Attaching to dev_area_2018_db_1, client_web, dev-area-2018
db_1 | 2019-02-28 17:51:40.679 UTC [1] LOG: listening on IPv4 address "0.0.0.0", port 5432
db_1 | 2019-02-28 17:51:40.679 UTC [1] LOG: listening on IPv6 address "::", port 5432
db_1 | 2019-02-28 17:51:40.698 UTC [1] LOG: listening on Unix socket "/var/run/postgresql/.s.PGSQL.5432"
db_1 | 2019-02-28 17:51:40.741 UTC [23] LOG: database system was shut down at 2019-02-28 17:46:23 UTC
db_1 | 2019-02-28 17:51:40.759 UTC [1] LOG: database system is ready to accept connections
client_web |
client_web | > dev-area-2018-client@0.0.0 start /usr/src/app
client_web | > node ./app.js
client_web |
client_web | Your client is currently running on port 8081
dev-area-2018 |
dev-area-2018 | > dev-area-2018@0.0.0 start /usr/src/app
dev-area-2018 | > node ./bin/www
dev-area-2018 |
dev-area-2018 | Server running at http://localhost:8080/
dev-area-2018 | could not connect to postgres { Error: connect ECONNREFUSED 127.0.0.1:5432
dev-area-2018 | at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1083:14)
dev-area-2018 | errno: 'ECONNREFUSED',
dev-area-2018 | code: 'ECONNREFUSED',
dev-area-2018 | syscall: 'connect',
dev-area-2018 | address: '127.0.0.1',
dev-area-2018 | port: 5432 }我不明白为什么我无法使用Docker将我的服务器连接到DataBase PostgreSQL。
编辑:谢谢你的帮助,但你的解决方案总是有相同的问题和相同的输出。我成功地使用了这个docker-compose:
version: "3"
services:
server:
build: .
container_name: dev-area-2018
restart: always
ports:
- 8080:8080
links:
- db
- db:database
depends_on:
- db
environment:
DATABASE_URL: postgres://postgres@db
client:
build: ./client_web/
container_name: client_web
ports:
- 8081:8081
db:
image: postgres:latest
ports:
- 5432:5432
environment:
POSTGRES_USER: postgres
POSTGRES_DB: API谢谢,致敬。
发布于 2019-03-01 06:02:32
在使用postgres和docker时,我建议不要像上面那样设置URL。您上面设置的URL已经是您通过内部docker网络访问它的方式。如果删除它,那么访问postgres实例所需的URL就是postgres://USER:PWD@postgres/your_db。
此外,您的URL中确实有一个拼写错误。
发布于 2019-03-01 13:39:55
我不明白为什么我不能使用Docker将我的服务器连接到我的DataBase PostgreSQL。
因为在大多数情况下,server容器将启动并尝试连接到db容器,但是,db启动需要时间(通常为10-15秒)。
这就是为什么会出现could not connect to postgres { Error: connect ECONNREFUSED 127.0.0.1:5432异常,因为db没有启动并准备好接受连接。
您可以做的是在server容器启动失败后重新启动它。
version: "3"
services:
server:
build: .
container_name: dev-area-2018
restart: always # will restart the container if fails to start
ports:
- 8080:8080
depends_on:
- db
...发布于 2019-03-01 14:01:54
您的项目客户端正在尝试访问127.0.0.1:5432中的postgress,该地址在docker架构下不再适用。
根据docker documentation的说法
默认情况下,
Compose会为你的应用设置一个单独的网络。服务的每个容器都加入默认网络,并且既可由该网络上的其他容器访问,也可由它们在与容器名称相同的主机名处发现。
Docker为您管理虚拟网络中的所有实例,并使用您在docker-compose文件中分配给容器的名称使它们可用。
因此,您必须从您的客户端使用以下字符串访问postgress:
postgres://<user>:<password>@db/api.请注意,对db的任何请求都将被docker捕获,并被重定向到由docker管理的虚拟网络中容器的host:port。
https://stackoverflow.com/questions/54931621
复制相似问题