资讯专栏INFORMATION COLUMN

使用 Docker 和 Fig 避免容器之间的竞争

kk_miles / 711人阅读

摘要:使用和的时候,当我们启动多个容器的时候,比如一个服务和一个服务,就有可能遇到竞争问题。但是这不是一件容易的事情。这有个内建的解决方案。

  

注:该文作者是 Chmouel,原文是 Avoiding race conditions between containers with docker and fig

  

该文我主要是意译,详细的看原文吧。

使用 Docker 和 Fig 的时候,当我们启动多个容器的时候,比如一个 web 服务和一个 DB 服务,就有可能遇到竞争问题。正常来说,应该是 DB 先与 Web 服务启动,但是因为 DB 没有时间配置它自己,然后 web 服务已经启动了,这样就会造成 web 连接数据库失败。

理想中,app 应该等待 DB 已经设置好并且启动后才开始连接 DB。但是这不是一件容易的事情。

docker 和 fig 的开发者已经注意到这个问题,并且在开发版已经有一些建议了:

https://github.com/docker/docker/issues/7445

这个主意就是 docker 必须等待暴露的端口已经打开了并且 listening 是可用的才告诉容器已经启动。这不是容易做到的,因为 Docker 将很难弄清楚该端口是开放的。

这有个内建的 Python 解决方案。代码如下:

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
}

在我 app 服务的 start.sh 脚本中,在启动我的 web 服务之前,我像这样使用它:

check_up "DB Server" ${DB_PORT_3306_TCP_ADDR} 3306

该方法的优势是它能非常快速的知道端口是否打开。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/26347.html

相关文章

  • Docker相关项目

    摘要:相关基于项目和项目,并遵循应用的十二因素风格。相关在设计上,项目尽量保持驱动和模块化,以便模块支持不同的实现方案。相关不仅可以管理众多虚拟机,其计算服务还支持对的驱动,管理引擎的子项目还可用于通过模板管理容器。现已整合公司所支持的项目。 整理自《Docker技术入门与实践》 PaaS(Platform as a Service) PaaS 是希望提供一个统一的可供所有软件直接运行而无需...

    littlelightss 评论0 收藏0
  • 容器技术在游戏云应用展望

    摘要:目前,腾讯内部业务运行环境基本全部实现了容器化,在技术大会中,腾讯云高级产品经理刘永峰曾发表演讲时代,公有云面临的挑战和机遇。本文中刘永峰展望了容器技术在游戏云的应用。 容器技术是一种轻量级虚拟化技术,能够以很细的粒度,虚拟化独立的系统运行环境。这就意味着,一台物理的服务器,或者是一台云上面的虚拟服务器,能够同时运行成百上千个独立的容器。基于游戏行业短平快的鲜明特点, 每一个游戏世界里面,每...

    Lyux 评论0 收藏0
  • Docker大坑小洼

    摘要:正在学习,留着看看转自的大坑小洼成为云计算领域的新宠儿已经是不争的事实,作为高速发展的开源项目,难免存在这样或那样的瑕疵。话不多说,一起来领略的大坑小洼。原因回归至上文的第一个坑。如此一来,只要内部涉及到域名解析,则立即受到影响。 正在学习Docker,留着看看 转自Docker的大坑小洼 Docker成为云计算领域的新宠儿已经是不争的事实,作为高速发展的开源项目,难免存在这样或那样...

    My_Oh_My 评论0 收藏0
  • 带你 Docker Hangzhou Meetup #3 抢鲜看

    摘要:在浙江大学实验室项目组负责的架构研究,以及做与技术结合的实践。耿辉的最新动态,在的大会发布了等新特性,耿辉为大家带来前沿的最新动态。介绍耿辉,华为开源软件战略专家。 showImg(https://segmentfault.com/img/bVkqvv); Docker 爱好者们,本周六 12.27 的 Docker Meetup #3 约么? 本次的杭州 Docker Meetu...

    PrototypeZ 评论0 收藏0
  • Cube如何助力科盾业务容器化“一步到位”?

    前言 以Docker为代表的容器技术缩短了企业应用从开发、构建到发布、运行的整个生命周期。Gartner推测到2022年将会有75%的全球化企业将在生产中使用容器化的应用(当前约为30%)。由于Docker往往难以独立支撑起大规模容器化部署,因此诞生了Kubernetes等容器编排工具,解决了大规模容器的组织和管理难题。 但事实上,Kubernetes的使用体系还是非常复杂的,对于企业的开...

    happyhuangjinjin 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<