gpt4 book ai didi

rabbitmq - 图 : docker containers start synchronisation

转载 作者:行者123 更新时间:2023-12-04 18:06:01 26 4
gpt4 key购买 nike

对于我的一个家庭项目,我决定使用 docker 容器和 fig 进行编排(第一次使用这些工具)。

这是我的 fig.yaml:

rabbitmq:
image: dockerfile/rabbitmq:latest
mongodb:
image: mongo
app:
build: .
command: python /code/app/main.py
links:
- rabbitmq
- mongodb
volumes:
- .:/code

Rabbitmq 启动时间比我的应用程序的加载时间慢得多。即使rabbitmq容器首先开始加载(因为它在应用程序链接中),当我的应用程序尝试连接到rabbitmq服务器时它还不可用(这肯定是加载时间问题,因为如果我在连接到rabbitmq之前只插休眠眠5秒 -一切正常)。是否有一些标准方法可以解决加载时间同步问题?

谢谢。

最佳答案

我认为没有标准的方法来解决这个问题,但这是一个已知的问题,有些人有可以接受的解决方法。

a proposal在 Docker 问题跟踪器上关于在容器监听暴露的端口之前不考虑容器已启动。然而,它可能不会被接受,因为它会在其他地方产生其他问题。有一个fig proposal也在同一个话题上。

简单的解决方案是像@jcortejoso 所说的那样进行 sleep 。来自 http://blog.chmouel.com/2014/11/04/avoiding-race-conditions-between-containers-with-docker-and-fig/ 的示例:

function check_up() {
service=$1
host=$2
port=$3

max=13 # 1 minute

counter=1
while true;do
python -c "import socket;s = socket.socket(socket.AF_INET, socket.SOCK_STREAM);s.connect(('$host', $port))" \
>/dev/null 2>/dev/null && break || \
echo "Waiting that $service on ${host}:${port} is started (sleeping for 5)"

if [[ ${counter} == ${max} ]];then
echo "Could not connect to ${service} after some time"
echo "Investigate locally the logs with fig logs"
exit 1
fi

sleep 5

(( counter++ ))
done
}

然后使用 check_up "DB Server" ${RABBITMQ_PORT_5672_TCP_ADDR} 5672在启动您的应用服务器之前,如上面的链接中所述。

另一种选择是使用 docker-wait .在您的 fig.yml .
rabbitmq:
image: dockerfile/rabbitmq:latest
mongodb:
image: mongo
rabbitmqready:
image: aanand/wait
links:
- rabbitmq
app:
build: .
command: python /code/app/main.py
links:
- rabbitmqready
- mongodb
volumes:
- .:/code

关于rabbitmq - 图 : docker containers start synchronisation,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27670828/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com