ASP.NET Core分布式项目实战

默认教学计划
1067人加入学习
(33人评价)
价格 ¥398.00
教学计划

折腾了三天,终于把两个容器启动起来了。

解决方案:

[docker-compose.yml]

version: '3.4'

services:
  db:
    image: mysql/mysql-server
    container_name: db
    networks:
      innernet:
        aliases:
          - mysqldb
          - db
    restart: always
    ports:
      - '3306:3306'
    environment:
      MYSQL_ROOT_PASSWORD: Pwd@123456
      MYSQL_USER: simon
      MYSQL_PASSWORD: Pwd@123456
    volumes:
      - c:\applications\docker\mysql\mysql-init:/docker-entrypoint-initdb.d
      - c:\applications\docker\mysql\data:/var/lib/mysql
      - c:\applications\docker\mysql\config:/usr/local/mysqlconf
    command: >
      bash -c '
      cp /usr/local/mysqlconf/*.cnf /etc/
      && chmod 644 /etc/*.cnf
      && /entrypoint.sh mysqld
      '
  user.api:
    image: simon/userapicore
    build:
      context: .
      dockerfile: User.API/Dockerfile
    networks:
      - innernet
    container_name: userapicore
    ports:
      - '8002:80'
    depends_on:
      - db
networks:
  innernet:
    driver: bridge

解决问题点包括:

1 Mysql的root密码需要符合强密码要求,否则登录可能发生root密码正确无法登录/root空密码可登陆。

2 Mysql外置配置文件,win系统映射后默认权限为777。导致mysql提示“该配置文件因全局可写,忽略该文件”,导致外置配置不生效问题。

【推荐】目前解决方案为增加command指令,复制配置文件到etc目录,并改权限为644,问题解决:

command: >
      bash -c '
      cp /usr/local/mysqlconf/*.cnf /etc/
      && chmod 644 /etc/*.cnf
      && /entrypoint.sh mysqld

【未测试】或将项目文件存放于c:/users目录下,本项不符合习惯未测试。

3 关于windows下的路径设置,参考vs2017自动生成的yml文件,写法如下:

volumes:
      - c:\applications\docker\mysql\mysql-init:/docker-entrypoint-initdb.d

注意盘符的冒号和斜杠方向。

【注意】win环境下yaml路径书写与cmd的dodker run命令书写方式不同!

4 各容器采用network方式加入网络,需要通过容器名访问,需要在network下指定aliases别名。

【释疑】network下的aliases不是该网络的别名,是加入该网络的容器别名(主机名)。

 

 

[展开全文]

windows10企业版

(1挂载数据卷 相对路径)

../../../docker/beta/mysql-init/init.sql

修改密码 赋予用户权限 创建数据库等操作 

version: '3'
 
services:
  db:
    image: mysql/mysql-server
    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: pwd23456
    volumes:
       - ../../../docker/beta/mysql-init:/docker-entrypoint-initdb.d
  web:
     build: .
     container_name: 'aspnetcore'
     ports:
        - '8000:80'
     depends_on:
        - db
     volumes:
       - ../../../docker/project/appsettings.json:/app/appsettings.json

(2)

version: '3'
 
services:
  db:
    image: mysql/mysql-server
    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: pwd23456
    volumes:
       - /e/docker/beta/mysql-init:/docker-entrypoint-initdb.d
  web:
     build: .
     container_name: 'aspnetcore'
     ports:
        - '8000:80'
     depends_on:
        - db
     volumes:
       - /e/docker/project/appsettings.json:/app/appsettings.json

 

 

都是企业版 公司电脑(2)就不可以 我自己的笔记本就可以,没有添加.env文件 vs是升级到最新版本 15.7.3 。 绝对路径,相对路径都可以。core2.0和core2.1不兼容 变化挺多。资料卷挂载终于完了.....

[展开全文]

找到一个比较好的办法:

version: '2.1'
services:
  web:
    build: .
    depends_on:
      db:
        condition: service_healthy
      redis:
        condition: service_started
  redis:
    image: redis
  db:
    image: redis
    healthcheck:
      test: "exit 0"
 
[展开全文]

授课教师

程序员

课程特色

下载资料(2)
视频(144)
讨论(1)
图文(2)