折腾了三天,终于把两个容器启动起来了。
解决方案:
[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不是该网络的别名,是加入该网络的容器别名(主机名)。