首页 > 解决方案 > docker-compose 首次启动并构建,MySql 服务器启动速度比 .net5 API 慢

问题描述

我在 docker 中使用 MySQL 和 .net5 Web API。我的 docker 配置是带有 WSL2 的 Window10 Home。

我的 Docker-compose 和 compose.override 文件如下

码头工人-compose.yml

version: '3.4'

services:
  userdb:
    image: mysql

  portainer:
    image: portainer/portainer-ce

  usermanagement.api:
    image: ${DOCKER_REGISTRY-}usermanagementapi
    build:
      context: .
      dockerfile: Services/User/User.API/Dockerfile

volumes:
  mysql_data:
  portainer_data:

docker-compose.override.yml

version: '3.4'

services:
  userdb:
    container_name: userdb
    restart: always
    environment:
      - MYSQL_ROOT_PASSWORD=root
      - MYSQL_DATABASE=user
    ports:
      - "3306:3306"
    volumes:
      - mysql_data:/var/lib/mysql

  portainer:
    container_name: portainer
    restart: always
    ports:
      - "9000:9000"
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - portainer_data:/data

  usermanagement.api:
    environment:
      - ASPNETCORE_ENVIRONMENT=Development
      - "ConnectionStrings:DefaultConnection=server=userdb;port=3306;database=user;userid=root;pwd=root;"
    depends_on:
      - userdb
    ports:
      - "8001:80"

每当我第一次构建或构建我的 docker-compose 文件时(重新启动或清理旧卷然后 DC 启动)。然后它抛出错误 MySql connection error MySqlConnector.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts。

然后我必须手动停止然后启动我的 API 容器。然后连接工作正常。

我做错了什么或对此问题有任何解决方案吗?请分享?

标签: mysqldocker.net-coredocker-compose.net-5

解决方案


案卷撰写文档有一些答案。

要么更改您的应用程序以重试连接,要么使用等待 db 端口准备好的包装脚本

https://docs.docker.com/compose/startup-order/


推荐阅读