- 定義docker compose
version: '3' services: composedb: image: mysql/mysql-server container_name: composedb command: mysqld --character-set-server=utf8 --collation-server=utf8_general_ci restart: always ports: - "3306:3306" environment: MYSQL_ROOT_PASSWORD: pwd123456 MYSQL_USER: test MYSQL_PASSWORD: pwd123456 volumes: - /docker/network/beta/mysql-init:/docker-entrypoint-initdb.d web: build: . container_name: aspnetcore ports: - "8004:80" #entrypoint: "sh ./wait-for-it.sh composedb:3306 -- sh ./aspnetcore.sh" #command: ["./wait-for-it.sh", "composedb:3306", "--", "./aspnetcore.sh"] depends_on: - composedb
- 修改初始化實力代碼當數據庫鏡像初始化完畢后執行數據初始化
public static async Task SeedAsync(IApplicationBuilder ApplicationBuilder, ILoggerFactory LoggerFactory, int? retry = 0) { var retryForAvaibility = retry.Value; using (var scope = ApplicationBuilder.ApplicationServices.CreateScope())//數據庫未初始化失敗會catch { try { var context = (UserContext)scope.ServiceProvider.GetService(typeof(UserContext)); var logger = (ILogger<UserContextSeed>)scope.ServiceProvider.GetService(typeof(ILogger<UserContextSeed>)); logger.LogDebug("Begin UserContextSeed SeedAsyc"); context.Database.Migrate(); if (!context.Users.Any()) { context.Add(new Model.UserInfo { Name = "cyao", Company = "nocompany", Title = "軟件工程師" }); context.SaveChanges(); } } catch (System.Exception ex) { retryForAvaibility++; if (retryForAvaibility > 10) { var logger = LoggerFactory.CreateLogger(typeof(UserContextSeed)); logger.LogError(ex.Message); await SeedAsync(ApplicationBuilder, LoggerFactory, retryForAvaibility); } } } }
- 其他的一些問題
1.高版本的MySQL 加密方法使用caching_sha2_password 2.低版本的Mysql創建的用戶會有權限問題 使用root用戶進入到bash 然后執行: GRANT ALL PRIVILEGES ON *.* TO 'test'@'%' WITH GRANT OPTION;
- liunx 跑到對應的docker-compose 文件路徑后執行build 然后將docker-compose up起來
- docker-compose build 構建dockers-compose鏡像
- docker-compose up
- docker-compose down