给出以下docker-compose.test.yml文件:
version: '2'
services:
sut:
build: .
command: nosetests
environment:
- DJANGO_SETTINGS_MODULE=test.settings
links:
- db
db:
image: postgres
expose:
- 5432
构建sut容器
docker-compose -f docker-compose.test.yml build sut
运行容器:
thomas@linuxclientlobnek01:~/github/djlobnek$ docker-compose -f docker-compose.test.yml run sut /bin/bash
root@6694ec7148ac:/djlobnek# psql -h localhost -U postgres
psql: could not connect to server: Connection refused
Is the server running on host "localhost" (::1) and accepting
TCP/IP connections on port 5432?
**could not connect to server: Connection refused**
Is the server running on host "localhost" (127.0.0.1) and accepting
TCP/IP connections on port 5432?
答案 0 :(得分:1)
在数据库准备好接受连接之前,您的应用程序可能正在尝试连接到数据库。如果是这种情况,那么在sut
容器中实现某种等待数据库循环可以解决问题。我过去曾使用过类似的东西:
while ! psql -h db -U postgres postgres -c 'select 1'; do
echo "waiting for database"
sleep 1
done
如果您的应用程序知道如何重试不成功的数据库连接,那么这是不必要的。
在您尝试此操作之前,最好验证postgres容器是否实际正常运行(例如,输入带有sut
的{{1}}容器并尝试使用{{手动连接1}})。
<强>更新强>
尝试从docker exec
容器内部连接psql
无法正常工作(postgres不会在该容器内运行)。您需要使用主机名localhost
,否则您需要sut
容器的IP地址。 E.g:
db
如果您db
容器本身postgres -h db -U postgres postgres
,则可以使用localhost
作为主机名。