Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.Net Core docker容器无法连接到MySQL docker容器_Mysql_Docker_Asp.net Core_.net Core - Fatal编程技术网

.Net Core docker容器无法连接到MySQL docker容器

.Net Core docker容器无法连接到MySQL docker容器,mysql,docker,asp.net-core,.net-core,Mysql,Docker,Asp.net Core,.net Core,我有一个mysql数据库托管在docker容器上。我能够在我的Windows10机器上使用dbeaver客户端应用程序连接到mysql数据库(托管在docker容器上)。但是,我无法从部署在另一个docker容器上的.Net核心应用程序连接到它。我得到一个无法连接到任何指定的MySQL主机。错误 我会错过什么 Appsettings.json: "ConnectionStrings": { "InstaTranscribeDBConnection&quo

我有一个mysql数据库托管在docker容器上。我能够在我的Windows10机器上使用dbeaver客户端应用程序连接到mysql数据库(托管在docker容器上)。但是,我无法从部署在另一个docker容器上的.Net核心应用程序连接到它。我得到一个
无法连接到任何指定的MySQL主机。
错误

我会错过什么

Appsettings.json:

  "ConnectionStrings": {
    "InstaTranscribeDBConnection": "server=localhost;port=3306;database=wordpress;user=root;password=SomePassword;"
  },
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["server/InstaTranscribe.Server.csproj", "server/"]
COPY ["client/InstaTranscribe.Client.csproj", "client/"]
RUN dotnet restore "server/InstaTranscribe.Server.csproj"
COPY . .
WORKDIR "/src/server"
RUN dotnet build "InstaTranscribe.Server.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "InstaTranscribe.Server.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "InstaTranscribe.Server.dll"]
RUN chmod +x ./entrypoint.sh
CMD /bin/bash ./entrypoint.sh
#!/bin/bash

set -e
run_cmd="dotnet run --server.urls http://*:80"    
until dotnet ef database update; do
>&2 echo "SQL Server is starting up"
sleep 1
done    
>&2 echo "SQL Server is up - executing command"
exec $run_cmd
Unhandled exception. System.InvalidOperationException: An exception has been raised that is likely due to a transient failure. Consider enabling transient error resiliency by adding 'EnableRetryOnFailure()' to the 'UseMySql' call.
 ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
   at MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, Int32 startTickCount, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 474
   at MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Int32 startTickCount, Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 741
   at MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 396
   at MySql.Data.MySqlClient.MySqlConnection.Open() in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 362
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(Boolean errorsExpected)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlDatabaseCreator.<>c__DisplayClass18_0.<Exists>b__0(DateTime giveUp)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_0`2.<Execute>b__0(DbContext c, TState s)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
Dockerfile:

  "ConnectionStrings": {
    "InstaTranscribeDBConnection": "server=localhost;port=3306;database=wordpress;user=root;password=SomePassword;"
  },
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["server/InstaTranscribe.Server.csproj", "server/"]
COPY ["client/InstaTranscribe.Client.csproj", "client/"]
RUN dotnet restore "server/InstaTranscribe.Server.csproj"
COPY . .
WORKDIR "/src/server"
RUN dotnet build "InstaTranscribe.Server.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "InstaTranscribe.Server.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "InstaTranscribe.Server.dll"]
RUN chmod +x ./entrypoint.sh
CMD /bin/bash ./entrypoint.sh
#!/bin/bash

set -e
run_cmd="dotnet run --server.urls http://*:80"    
until dotnet ef database update; do
>&2 echo "SQL Server is starting up"
sleep 1
done    
>&2 echo "SQL Server is up - executing command"
exec $run_cmd
Unhandled exception. System.InvalidOperationException: An exception has been raised that is likely due to a transient failure. Consider enabling transient error resiliency by adding 'EnableRetryOnFailure()' to the 'UseMySql' call.
 ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
   at MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, Int32 startTickCount, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 474
   at MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Int32 startTickCount, Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 741
   at MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 396
   at MySql.Data.MySqlClient.MySqlConnection.Open() in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 362
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(Boolean errorsExpected)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlDatabaseCreator.<>c__DisplayClass18_0.<Exists>b__0(DateTime giveUp)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_0`2.<Execute>b__0(DbContext c, TState s)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
entrypoint.sh:

  "ConnectionStrings": {
    "InstaTranscribeDBConnection": "server=localhost;port=3306;database=wordpress;user=root;password=SomePassword;"
  },
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["server/InstaTranscribe.Server.csproj", "server/"]
COPY ["client/InstaTranscribe.Client.csproj", "client/"]
RUN dotnet restore "server/InstaTranscribe.Server.csproj"
COPY . .
WORKDIR "/src/server"
RUN dotnet build "InstaTranscribe.Server.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "InstaTranscribe.Server.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "InstaTranscribe.Server.dll"]
RUN chmod +x ./entrypoint.sh
CMD /bin/bash ./entrypoint.sh
#!/bin/bash

set -e
run_cmd="dotnet run --server.urls http://*:80"    
until dotnet ef database update; do
>&2 echo "SQL Server is starting up"
sleep 1
done    
>&2 echo "SQL Server is up - executing command"
exec $run_cmd
Unhandled exception. System.InvalidOperationException: An exception has been raised that is likely due to a transient failure. Consider enabling transient error resiliency by adding 'EnableRetryOnFailure()' to the 'UseMySql' call.
 ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
   at MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, Int32 startTickCount, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 474
   at MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Int32 startTickCount, Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 741
   at MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 396
   at MySql.Data.MySqlClient.MySqlConnection.Open() in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 362
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(Boolean errorsExpected)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlDatabaseCreator.<>c__DisplayClass18_0.<Exists>b__0(DateTime giveUp)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_0`2.<Execute>b__0(DbContext c, TState s)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
StackTrace:

  "ConnectionStrings": {
    "InstaTranscribeDBConnection": "server=localhost;port=3306;database=wordpress;user=root;password=SomePassword;"
  },
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.1-buster AS build
WORKDIR /src
COPY ["server/InstaTranscribe.Server.csproj", "server/"]
COPY ["client/InstaTranscribe.Client.csproj", "client/"]
RUN dotnet restore "server/InstaTranscribe.Server.csproj"
COPY . .
WORKDIR "/src/server"
RUN dotnet build "InstaTranscribe.Server.csproj" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "InstaTranscribe.Server.csproj" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "InstaTranscribe.Server.dll"]
RUN chmod +x ./entrypoint.sh
CMD /bin/bash ./entrypoint.sh
#!/bin/bash

set -e
run_cmd="dotnet run --server.urls http://*:80"    
until dotnet ef database update; do
>&2 echo "SQL Server is starting up"
sleep 1
done    
>&2 echo "SQL Server is up - executing command"
exec $run_cmd
Unhandled exception. System.InvalidOperationException: An exception has been raised that is likely due to a transient failure. Consider enabling transient error resiliency by adding 'EnableRetryOnFailure()' to the 'UseMySql' call.
 ---> MySql.Data.MySqlClient.MySqlException (0x80004005): Unable to connect to any of the specified MySQL hosts.
   at MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs, Int32 startTickCount, ILoadBalancer loadBalancer, IOBehavior ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/Core/ServerSession.cs:line 474
   at MySql.Data.MySqlClient.MySqlConnection.CreateSessionAsync(ConnectionPool pool, Int32 startTickCount, Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 741
   at MySql.Data.MySqlClient.MySqlConnection.OpenAsync(Nullable`1 ioBehavior, CancellationToken cancellationToken) in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 396
   at MySql.Data.MySqlClient.MySqlConnection.Open() in /_/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:line 362
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(Boolean errorsExpected)
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(Boolean errorsExpected)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(Boolean errorsExpected)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlDatabaseCreator.<>c__DisplayClass18_0.<Exists>b__0(DateTime giveUp)
   at Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.<>c__DisplayClass12_0`2.<Execute>b__0(DbContext c, TState s)
   at Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState state, Func`3 operation, Func`3 verifySucceeded)
未处理的异常。System.InvalidOperationException:引发了一个异常,该异常可能是由于瞬时故障引起的。考虑通过将“EnabReReTyNoRebug()”添加到“UsMySQL”调用来启用瞬态错误恢复。
--->MySql.Data.MySqlClient.MySqlException(0x80004005):无法连接到任何指定的MySql主机。
在MySqlConnector.Core.ServerSession.ConnectAsync(ConnectionSettings cs、Int32 startTickCount、iloaddbalancer-loadBalancer、IOBehavior-IOBehavior、CancellationToken-CancellationToken-CancellationToken)的/\usrc/MySqlConnector/Core/ServerSession.cs:第474行
在/u/src/MySqlConnector/MySql.Data.MySqlConnection.CreateSessionAsync(ConnectionPool,Int32 startTickCount,Nullable`1 ioBehavior,CancellationToken CancellationToken)中/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs:第741行
在/\uu/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs中的MySql.Data.MySqlClient.MySqlConnection.OpenAsync(null`1 ioBehavior,CancellationToken CancellationToken)处:第396行
在/\uu/src/MySqlConnector/MySql.Data.MySqlClient/MySqlConnection.cs中的MySql.Data.MySqlClient.MySqlConnection.Open()处:第362行
位于Microsoft.EntityFrameworkCore.Storage.RelationalConnection.OpenDbConnection(布尔错误预期)
位于Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open(布尔错误预期)
位于Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlRelationalConnection.Open(布尔错误预期)
在Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlDatabaseCreator.c__DisplayClass18_0.b__0(日期时间放弃)
在Microsoft.EntityFrameworkCore.ExecutionStrategyExtensions.c__显示Class12_0`2.b_0(DbContext c,TState s)
在Pomelo.EntityFrameworkCore.MySql.Storage.Internal.MySqlExecutionStrategy.Execute[TState,TResult](TState状态,Func`3操作,Func`3验证成功)

您将需要运行多个docker实例

  • .NET核心
  • MySQL
  • 他们需要成为同一网络的一部分

    如果您使用的是docker compose文件,那么在两个docker容器之间提供专用网络就更容易了

    示例如下所示:

    version: '3'
    services:
      moviedb:
        image: mysql
        command: --default-authentication-plugin=mysql_native_password
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: masteringdocker
          MYSQL_DATABASE: MvcMovieContext
          MYSQL_USER: moviedbadmin
          MYSQL_PASSWORD: masteringdocker
        volumes:
          - ./MvcMovie/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
      web:
        build: .
        restart: always
        ports:
          - "8000:80"
        depends_on:
          - moviedb
          - cache
    
    上述操作将创建一个默认网络,并将两个容器放在其上。但如果你想更好地控制网络,你可以在下面添加一节

    networks:
      public_net:
        driver: bridge
        ipam:
          driver: default
          config:
            - subnet: ${NETWORK_SUBNET}
    
    并使用以下部分更新每个服务
    moviedb
    web
    ,以使用此网络:

    networks:
      public_net:
         ipv4_address: ${HA_PROXY_IP}
    
    HA_PROXY_IP位于.env文件中

    HA_PROXY_IP=192.168.0.99
    
    这应该让你开始。您必须处理多个文件夹的复杂性和
    将您的
    docker compose.yml
    Dockerfile
    放在正确的位置,以使所有内容都能顺利运行。

    您将需要运行多个docker实例

  • .NET核心
  • MySQL
  • 他们需要成为同一网络的一部分

    如果您使用的是docker compose文件,那么在两个docker容器之间提供专用网络就更容易了

    示例如下所示:

    version: '3'
    services:
      moviedb:
        image: mysql
        command: --default-authentication-plugin=mysql_native_password
        restart: always
        environment:
          MYSQL_ROOT_PASSWORD: masteringdocker
          MYSQL_DATABASE: MvcMovieContext
          MYSQL_USER: moviedbadmin
          MYSQL_PASSWORD: masteringdocker
        volumes:
          - ./MvcMovie/init.sql:/docker-entrypoint-initdb.d/init.sql:ro
      web:
        build: .
        restart: always
        ports:
          - "8000:80"
        depends_on:
          - moviedb
          - cache
    
    上述操作将创建一个默认网络,并将两个容器放在其上。但如果你想更好地控制网络,你可以在下面添加一节

    networks:
      public_net:
        driver: bridge
        ipam:
          driver: default
          config:
            - subnet: ${NETWORK_SUBNET}
    
    并使用以下部分更新每个服务
    moviedb
    web
    ,以使用此网络:

    networks:
      public_net:
         ipv4_address: ${HA_PROXY_IP}
    
    HA_PROXY_IP位于.env文件中

    HA_PROXY_IP=192.168.0.99
    
    这应该让你开始。您必须处理多个文件夹的复杂性和
    将您的
    docker compose.yml
    Dockerfile
    放在正确的位置,以便一切顺利进行。

    这两个容器是否存在于同一网络中?您是否有一个
    docker compose.yml
    ?两个容器是否存在于同一网络中?您是否有
    docker compose.yml