【问题标题】:Setup aspnetcore with MySQL database in docker在 docker 中使用 MySQL 数据库设置 aspnetcore
【发布时间】:2018-02-20 13:59:21
【问题描述】:

我正在尝试设置一个 docker-compose 文件,其中包含一个用于 asp.net-core、mysql 数据库和 phpmyadmin 的容器。设置我的 mysql-server 没有问题,我可以使用 phpmyadmin 访问它。此外,我的 asp.net-core 应用程序运行正常,我可以在浏览器中访问它。

但是,我无法与我的 MySQL 数据库建立连接。应用不断返回:

无法连接到任何指定的 MySQL 主机

应用程序正在通过 appsettings.json 中的连接字符串进行连接。

{
  "ConnectionStrings": {
    "FlowerAPIConnection": "server=localhost;userid=user;password=user;database=bloemenapi_db;Convert Zero Datetime=True"
  },
  "Logging": {
    "IncludeScopes": false,
    "Debug": {
      "LogLevel": {
        "Default": "Warning"
      }
    },
    "Console": {
      "LogLevel": {
        "Default": "Warning"
      }
    }
  }
}

我的猜测是,在 docker 容器中,正在运行的应用程序和 mysql 似乎无法在 localhost 上找到彼此。我尝试在连接字符串中使用 mysql 容器的 IP 地址,但这也不起作用。

我正在使用以下 docker-compose.yml 和 Dockerfile。

version: '3'

services:
  db:
    image: mysql
    restart: always
    container_name: flowerapi-db
    environment:
      - MYSQL_USER=root
      - MYSQL_PASSWORD=user
      - MYSQL_ROOT_PASSWORD=user
      - MYSQL_DATABASE=bloemenapi_db
    ports:
      - "3306"

  phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: flowerapi-pma
    ports:
      - "81:80"
    external_links:
      - db:mysql
    environment:
      PMA_HOST: "db"
      PMA_PORT: 3306
  web:
    image: flowerapi
    container_name: flowerapi-web
    build:
      context: ./FlowerAPI
      dockerfile: Dockerfile
    ports:
      - "5000:80"
    links:
      - db
    depends_on:
      - db

Dockerfile

FROM microsoft/aspnetcore:2.0
LABEL name "flower-api"
ARG source
WORKDIR /app
EXPOSE 5000/tcp
COPY ${source:-obj/Docker/publish} .
ENTRYPOINT ["dotnet", "FlowerAPI.dll"]

感谢您的帮助。

【问题讨论】:

  • “我可以使用 phpmyadmin 访问它” – 但是 在哪里 你会这样做吗?可能来自数据库运行的同一个 docker 容器中?这与您的 Web 应用程序访问它的方式不同。它需要远程连接。 Docker 容器就像独立的计算机。
  • 是的,这是我的猜测。 Phpmyadmin 通过 localhost:81 连接到 MySQL 数据库,所以连接似乎存在。
  • 你解决了这个帕特里克吗?我有一个类似的问题。我没有使用 compose,但无法让 dotnet core 与 mysql 对话。我当然是使用mysql的启动,验证mysql已经启动并且可以访问等等。
  • 不,很遗憾没有。事实上,我放弃了。 :D

标签: mysql asp.net docker asp.net-core docker-compose


【解决方案1】:

默认情况下,容器不允许任何人从容器外部以 root 身份登录服务器。这可以防止其他容器(或主机)连接到数据库(使用 root 凭据)。您可以使用标志 MYSQL_ROOT_HOST 传递容器或主机的 IP,应允许使用 root 凭据连接到服务器。例如。要允许主机连接,您需要设置MYSQL_ROOT_HOST="172.17.0.1"。

我还看到你只创建了 root 用户,但在连接字符串中你使用了userid=user。您可以使用server=127.0.0.1 作为主机名。

【讨论】:

    【解决方案2】:

    试试这个。连接字符串与 MSSQL 有点不同

    "ConnectionStrings":{
            "FlowerAPIConnection":"Server=db;port=3306;Database=bloe‌menapi_db;User=user;Password=password;"
     }
    

    【讨论】:

      【解决方案3】:

      将 .NET 应用程序与 MySql db 连接需要 MySql 连接器。您需要在您的 asp.net 核心应用程序容器中安装该连接器

      【讨论】:

        【解决方案4】:

        localhost 在每个容器内,它不起作用。尝试使用db 作为主机名和端口3306 进行连接。

        【讨论】:

        • 好的,我已将连接字符串更新为"FlowerAPIConnection": "server=db;port=3306;userid=user;password=user;database=bloemenapi_db;Convert Zero Datetime=True",但仍然没有连接:(
        猜你喜欢
        • 2018-07-28
        • 2017-12-31
        • 1970-01-01
        • 2019-04-28
        • 2021-08-27
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多