.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 : / 사용자 / 루오 / 소스 /의 repos / API / API / MySQL을 초기화 스크립트)

#给用户授权(用于创建数据库以及数据表)
GRANT ALL PRIVILEGES ON *.* TO 'lzl'@'%' WITH GRANT OPTION;

#改变密码的加密方式(旧版本的navicat客户端不支持新版本mysql的密码加密方式,因此切换为原来的加密方式,否则连接不上mysql)
alter user 'lzl'@'%' identified with mysql_native_password by 'password';

참고 :

초기화 SQL 스크립트를 매핑 할 때, 드라이브가 공유되지 않습니다에 메시지가 표시되면 시작합니다.화상 20,200,111,200,053,441

해결 방법 :

마우스 오른쪽 단추로 고정 표시기 윈도우 -> 설정 -> 공유 드라이브는 해당 문자를 확인하실 수 있습니다 위해.

셋째, 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 

화상 20,200,111,204,937,419

2, 고정 표시기-작성을 시작합니다
docker-compose up
선박의 작동을 확인합니다
docker-compose ps

화상 20,200,111,201,029,864

4, 访问에 http : // localhost를 : 8004 / 사용자 / 가져 오기

화상 20,200,111,204,553,897

추신 : MySQL의 컨테이너를 시작하는 것은 연결되어 있지 않은 한 후, 다음 웹 응용 프로그램 (고정 표시기 다시 시작 aspnetcoreapi를) 다시 시작하십시오. 재시작가 액세스 할 수 있다면, 당신은 내결함성의 SeedData의 수를 증가시킬 수있다.

추천

출처www.cnblogs.com/roluodev/p/12181180.html