我在带有 MySQL 数据库的 .net 核心中有一个简单的 Web API 应用程序,它在没有 docker 的情况下也可以在本地运行。我有 Windows 10 家庭版,不能直接使用 docker,我必须使用 VirtualBox 才能使用 docker。
应用程序设置
"DatabaseConfig": {
"Server": "db",
"Port": "3306",
"Database": "CoreApiDatabase",
"User": "root",
"Password": "27101376"
}
配置服务
var server = Configuration["DatabaseConfig:Server"];
var port = Configuration["DatabaseConfig:Port"];
var database = Configuration["DatabaseConfig:Database"];
var user = Configuration["DatabaseConfig:User"];
var password = Configuration["DatabaseConfig:Password"];
services.AddDbContext<ApplicationDbContext>(options =>
options.UseMySql($"server={server}; userid={user}; pwd={password}; port={port}; database={database}"));
在 startup.cs 的配置方法中迁移和种子数据库
文件
FROM mcr.microsoft.com/dotnet/core/sdk:3.1 AS build-env
WORKDIR /app
COPY *.csproj ./
RUN dotnet restore
COPY . ./
RUN dotnet publish -c Release -o out
FROM mcr.microsoft.com/dotnet/core/aspnet:3.1
WORKDIR /app
EXPOSE 80
COPY --from=build-env app/out .
ENTRYPOINT [ "dotnet","CoreApiDatabase.dll" ]
Docker-compose.yml
version: "3"
services:
db:
image: mysql
ports:
- "3306:3306"
environment:
MYSQL_ROOT_PASSWORD: 27101376
networks:
- default
coreapidatabase:
image: saeedgz98/coreapidatabase
build:
context: .
dockerfile: Dockerfile
links:
- db:db
ports:
- 8001:80
restart: always
最后,在运行命令docker-compose up 时,我在执行和执行迁移时收到此错误。
我在用 root 用户设置 mysql 并在某些远程机器上运行它时运气很差。MySQL 有一些严格的权限要求 root@localhost 与 [email protected] 不同,例如。或者这就是我所理解的。如果您发现其他情况,请分享。
只是想在这里提供帮助。切换到另一种连接字符串形式
"server=<database name from docker-compose >;port=3306;userid=<database owner>;password=<owner password>;database=<database name>;"
docker-compose 可能如下所示:
version: '3.3'
services:
moviedb:
image: mysql
command: --default-authentication-plugin=mysql_native_password
environment:
MYSQL_ROOT_PASSWORD: <root password>
MYSQL_DATABASE: <database name>
MYSQL_USER: <database owner>
MYSQL_PASSWORD: <owner password>
避免编写自定义 dockerfile。使用 Visual Studio 创建并修改该文件的那个。
FROM mcr.microsoft.com/dotnet/core/aspnet:3.0-buster-slim AS base
WORKDIR /app
EXPOSE 80
FROM mcr.microsoft.com/dotnet/core/sdk:3.0-buster AS build
WORKDIR /src
COPY ["<project relative path>", "<project name>/"]
RUN dotnet restore "<project relative path>"
COPY . .
WORKDIR "/src/<project name>"
RUN dotnet build "<csproj name>" -c Release -o /app/build
FROM build AS publish
RUN dotnet publish "<csproj name>" -c Release -o /app/publish
FROM base AS final
WORKDIR /app
COPY --from=publish /app/publish .
ENTRYPOINT ["dotnet", "<project dll name>"]
也可以运行下面的docker命令,尝试登录数据库服务器
docker-compose up
docker ps
docker exec -it <sql container id> bash
一旦进入容器。运行以下 mysql 命令:
mysql -u <owner name> -p
<owner password>
SHOW DATABASES;
USE <database name>;
SHOW TABLES;
希望这可以帮助。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句