.netcoreapiコンテナとコンテナのmysqlをドッキングウィンドウは、構成します

はじめに:

基づいて.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スクリプトをマッピングする場合、ドライブが共有されていないにプロンプ​​トが表示されたときに起動します。画像-20200111200053441

ソリューション:

の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 

画像-20200111204937419

2、スタートドッキングウィンドウ、コン
docker-compose up
容器の動作を確認してください3。
docker-compose ps

画像-20200111201029864

4、访问ます。http:// localhostを:8004 /ユーザー/取得

画像-20200111204553897

PS:mysqlのコンテナが接続されていない開始した後、その後、(ドッカ再起動aspnetcoreapi)Webアプリケーションを再起動してみてください。再起動することができますアクセスする場合は、フォールトトレラントSeedDataの数を増やすことができます。

おすすめ

転載: www.cnblogs.com/roluodev/p/12181180.html