Docker等待postgresql运行

我在我的项目中使用与Django postgresql。 我有他们在不同的容器,问题是我需要等待postgres运行Django之前。 在这个时候,我正在用django容器的command.sh文件中的sleep 5进行操作。 我也发现,netcat可以做的伎俩,但我宁愿没有额外的软件包的方式。 curl和wget不能这样做,因为他们不支持postgres协议。 有没有办法做到这一点?

如果你有psql你可以简单地把下面的代码添加到你的.sh文件中:

 RETRIES=5 until psql -h $PG_HOST -U $PG_USER -d $PG_DATABASE -c "select 1" > /dev/null 2>&1 || [ $RETRIES -eq 0 ]; do echo "Waiting for postgres server, $((RETRIES--)) remaining attempts..." sleep 1 done 

您的解决schemetiziano问题是curl没有默认安装,我想避免安装额外的东西。 无论如何,我做了什么贝雷尔说。 这是脚本,如果有人需要它。

 import socket import time import os port = int(os.environ["DB_PORT"]) # 5432 s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) while True: try: s.connect(('myproject-db', port)) s.close() break except socket.error as ex: time.sleep(0.1) 

为什么不curl?

像这样的东西:

 while ! curl http://$POSTGRES_PORT_5432_TCP_ADDR:$POSTGRES_PORT_5432_TCP_PORT/ 2>&1 | grep '52' do sleep 1 done 

这个对我有用。

也许你可以使用docker compose来pipe理你的容器。

这里是文档。

在yaml文件中,可以设置links属性来表示服务之间的依赖关系。 然后,服务将按照您的意愿启动。