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
最后更新于 2018-09-06 14:31:55 并被添加「 docker, docker-compose, linux」标签,已有 3360 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处