はじめに:
基づいて.NetCoreApiコンテナとコンテナのMySQLインターネット迅速に構成するにドッキングウィンドウ-コンの使用、およびMySQLのコンテナ.NetCoreApiコンテナを起動します。
注意:
書き込みインデントドッキングウィンドウが-compose.ymlタブを使用しないでください、スペースで直接的である(...長い時間のために私をめちゃくちゃ)
まず、書き込みドッキングウィンドウ-compose.ymlファイル
version: "3"
services:
#mysql容器配置
db:
image: mysql/mysql-server #使用镜像
command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci #相当于dockerfile中my.cnf中的配置,要以mysqld开头,否则不会生效
container_name: db #mysql容器名称 此处很关键,要与Web应用中连接字符串server保持一致(上面的db是只是services的名称)
restart: always
ports:
- "3306:3306"
environment:
- MYSQL_PASSWORD=password
- MYSQL_ROOT_PASSWORD=password
- MYSQL_USER=lzl
volumes: #数据库初始化sql脚本目录映射 本机目录:容器目录(按照官方的来) mysql启动的时候执行该脚本
- C:/Users/Luo/source/repos/Api/Api/MySql-InitScript:/docker-entrypoint-initdb.d/
#web应用配置
web:
build: . #利用web应用的dockerfile来构建容器。 .为dockerfile所在的目录
container_name: "aspnetcoreapi" #容器名
ports:
- "8004:3827"
depends_on: #web应用依赖于mysql容器,此处设置让mysql容器先启动,再让web容器再启动。(注意:并不会等待mysql容器完全启动)
- db
第二に、初期化SQLスクリプト(C:/ユーザ/羅/ソース/レポ/ API / API /のMySQLのinitscript)
#给用户授权(用于创建数据库以及数据表)
GRANT ALL PRIVILEGES ON *.* TO 'lzl'@'%' WITH GRANT OPTION;
#改变密码的加密方式(旧版本的navicat客户端不支持新版本mysql的密码加密方式,因此切换为原来的加密方式,否则连接不上mysql)
alter user 'lzl'@'%' identified with mysql_native_password by 'password';
注意:
初期化SQLスクリプトをマッピングする場合、ドライブが共有されていないにプロンプトが表示されたときに起動します。
ソリューション:
のWindows->設定>共有ドライブのための右のドッキングウィンドウは、対応する文字を確認することができます。
第三に、netcoreapi SeedDataコードを変更する(容器MySQLが遅い開始以来、急速開始API、従って接続MySQLの与えられていません)
成功したスタートmysqlのコンテナまで、エラー再試行を追加することにより。
public void InitialDataBase(IApplicationBuilder app,int? retry=0)
{
var retryTimes = retry.Value;
using (var scope = app.ApplicationServices.CreateScope())
{
try
{
var context = scope.ServiceProvider.GetRequiredService<UserContext>();
context.Database.Migrate();
if (!context.Users.Any())
{
context.Users.Add(new User()
{
Company = "kingdee",
Name = "LZL",
Title = "2020",
Id = 1
});
context.SaveChanges();
}
}
catch (Exception ex)
{
retryTimes ++;
if(retryTimes<10)
{
InitialDataBase(app, retryTimes);
}
}
}
}
第四に、コンテナの配置を開始
次のコマンドの実行を開始するために:
図1に示すように、構成された画像をドッカー、構成
docker-compose build
ビューのビルド二つのミラー
docker ps
2、スタートドッキングウィンドウ、コン
docker-compose up
容器の動作を確認してください3。
docker-compose ps
4、访问ます。http:// localhostを:8004 /ユーザー/取得
PS:mysqlのコンテナが接続されていない開始した後、その後、(ドッカ再起動aspnetcoreapi)Webアプリケーションを再起動してみてください。再起動することができますアクセスする場合は、フォールトトレラントSeedDataの数を増やすことができます。