用 docker compose 把两个服务串起来,中间踩了几个小坑
【摘要】 第一次用 docker compose 把服务和数据库串起来,服务名互通、启动顺序、端口映射和数据卷都踩了点小坑,记下来给自己提个醒。
前两天想把一个小服务和数据库放一起跑,以前都是一条 docker run 解决,这次试了下 compose,写完才发现几个地方跟我想的不一样,顺手记下来。
先说最顺的一点:同一个 compose 文件里的服务,互相不用记 IP,直接用服务名当主机名就行。我一开始还傻乎乎去查容器 IP,后来发现服务里写 db:5432 就通了,省了不少事。
然后是第一个坑:depends_on 只管启动顺序,不管服务是不是真的准备好了。数据库容器起来了,不代表它已经能接受连接,我的服务上去就报错。后来加了 healthcheck,等数据库真正 ready 再起服务,才稳下来。
第二个坑是端口。services 里 ports 写 8080:80,是宿主机 8080 映射到容器 80,别写反了。我有一次写反,浏览器死活打不开,还以为是服务挂了,查了半天才发现是自己手滑。
第三个是数据卷。数据库的数据如果不挂卷,容器删了数据就没了。写上 volumes,把数据目录挂到宿主机上,down 掉再 up,数据还在,心里踏实多了。
最后跑起来就两条命令:docker compose up -d 启动,docker compose ps 看一眼状态。改了配置就 docker compose up -d 再跑一次,不用一个个容器去折腾。
总的来说,compose 就是把一堆 run 命令写进一个文件里,省事是真省事,但启动顺序、端口和数据卷这几处,第一次写很容易想当然,踩一次就记住了。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)