首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >docker其中一个容器立即关闭

docker其中一个容器立即关闭
EN

Stack Overflow用户
提问于 2021-11-26 09:16:17
回答 2查看 66关注 0票数 1

我正在尝试学习Docker,并尝试使用MariaDB和Go创建一个简单的CRUD应用程序。我为Go创建了一个Dockerfile

代码语言:javascript
复制
FROM golang:1.17

WORKDIR /src/app

COPY . .

# RUN go get -u github.com/go-sql-driver/mysql \
#     go get -u github.com/gin-gonic/gin

RUN go build -o app .

CMD [ "./app" ]

我还有一个docker-compose,这样我就可以启动MariaDB容器和Go容器:

代码语言:javascript
复制
version: '3.8'

services:
  db:
    container_name: appdb
    image: mariadb:latest
    volumes:
      - ./dbdata:/var/lib/mysql/data
    environment:
      MYSQL_ROOT_PASSWORD: "1234"
      MYSQL_DATABASE: "crudapp"
      MYSQL_USER: "root"
      MYSQL_PASSWORD: "root"
  
  app:
    container_name: crudapi
    build:
      context: .
    ports:
      - '8080:8080'
    depends_on:
      - db

当我运行docker-compose up时,appdb容器启动,但crudapi不启动。它看起来像是启动然后关闭,因为我在控制台中有退出代码0。我在网上搜索,但不明白为什么会发生这种情况。我看到我应该尝试将tty:true添加到docker-compose文件中,但同样不起作用。

我在这里做错了什么?

EN

回答 2

Stack Overflow用户

发布于 2021-11-26 10:29:54

在启动应用程序之前,depends_on不会等待数据库准备就绪,因此在启动时,Compose不会等到容器appdb准备就绪(无论这对您的特定应用程序意味着什么),而只是等到它开始运行。

在实践中,您必须在应用程序代码中实现检查,无论是在启动时还是在连接因任何原因而丢失时,您还可以包含一个wait-for like tool

票数 0
EN

Stack Overflow用户

发布于 2021-11-27 15:20:04

容器不会等待db启动。您必须在您的应用程序中添加超时。或者实现用于检入循环直到db容器启动为止的逻辑。

或者,您可以使用此处描述的脚本- Docker control startup script

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70122006

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档