docker-compose启动容器自动初始化数据库及容器(linux)间的连通性

序:当我们运行一个容器的时候需要对容器种的数据库添加所需要的库及表,如果进入容器中弄太麻烦了,自动化多好。应用容器和数据库容器都弄好后,发现应用链接不了数据库容器,该如何排查呢?

1.mysql的官方镜像可以支持在容器启动的时候自动执行指定的sql脚本或者shell脚本,只需要把sql和脚本放到docker-entrypoint-initdb.d目录下即可,下面是我些的docker-compose文件

version: '3.1'

services: web_service: image: frolvlad/alpine-oraclejdk8 tty: true depends_on: - mysql-dev working_dir: /webapp/ ports: - '8080:8081' volumes: - /etc/localtime:/etc/localtime:ro - /root/webapp/web/:/webapp/ restart: always

mysql-dev: image: mysql:5.7 environment: MYSQL_ROOT_PASSWORD: root MYSQL_DATABASE: root ports: - '3306:3306' volumes: - /root/webapp/sql/:/docker-entrypoint-initdb.d/ restart: always

sql的位置放到webapp/sql里面映射到容器/docker-entrypoint-initdb.d/目录,sql如下

-- 建库
CREATE DATABASE IF NOT EXISTS my_db default charset utf8 COLLATE utf8_general_ci;

-- 切换数据库 use my_data;

-- 建表 DROP TABLE IF EXISTS table1;

CREATE TABLE table1 ( id int(11) unsigned NOT NULL AUTO_INCREMENT, name varchar(20) DEFAULT NULL COMMENT '姓名', age int(11) DEFAULT NULL COMMENT '年龄', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 插入数据 INSERT INTO table1 (id, name, age) VALUES (1,'data',10), (2,'yang',11);


2.容器运行后web起不起来,查看日志好想连不上数据库

先ping数据库容器是否能ping通

ping mysql-dev

检验端口号是否可用

nc -v mysql-dev 3306

此外还有telnet命令

telnet mysql-dev  3306

nmap 命令

nmap mysql-dev -p 3306

参考:

https://blog.csdn.net/u011943534/article/details/81392993

https://www.jianshu.com/p/12fc253fa37d

https://www.cnblogs.com/onmyway20xx/articles/3626433.html

https://jingyan.baidu.com/article/455a9950aadeaea16727785e.html




暂无评论
发表新评论