使用docker-compose.yml的tomcat + mysql + war [英] tomcat + mysql + war using docker-compose.yml

查看:99
本文介绍了使用docker-compose.yml的tomcat + mysql + war的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在使用docker-compose.yml构建环境.

I am using docker-compose.yml to build my enviroment.

docker-compose.yml

docker-compose.yml

  version: '3'

    services:
      mysql:
        image: mysql:5.5
        container_name: mysql
        restart: always
        environment:
          MYSQL_DATABASE: my-test-app
          MYSQL_ROOT_PASSWORD: root
        volumes:
          - ./docker/db:/docker-entrypoint-initdb.d
        ports:
           - "3306:3306"

      tomcat:
        image: tomcat:8.5.35
        container_name: tomcat
        volumes:
          - ./docker/myapp.war:/usr/local/tomcat/webapps/myapp.war
        ports:
          - "8080:8080"
          

我的文件夹结构

my-env            
├── docker-compose.yml
├── docker
    ├── myapp.war
    ├── db
         ├── DB_INIT.SQL


         

DB_INIT.SQL

DB_INIT.SQL

CREATE TABLE EMPLOYEE (
  EMPLOYEE_ID BIGINT(20) NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(65) NOT NULL,
  DOB DATETIME DEFAULT NULL,
  GENDER VARCHAR(10) NOT NULL,
  MOBILE VARCHAR(65) DEFAULT NULL,
  EMAIL VARCHAR(60) DEFAULT NULL,
  PRIMARY KEY (EMPLOYEE_ID)
) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4;


INSERT INTO EMPLOYEE (NAME, DOB, GENDER, MOBILE, EMAIL) VALUES ("Aung Ko Tint", '1986-12-02', 'MALE', '09458682152', 'aungko@demo.com');
INSERT INTO EMPLOYEE (NAME, DOB, GENDER, MOBILE, EMAIL) VALUES ("Hein Thu", '1990-10-25', 'MALE', '0942562871', 'mthk@demo.com');
INSERT INTO EMPLOYEE (NAME, DOB, GENDER, MOBILE, EMAIL) VALUES ("Arr Yone", '1991-12-15', 'MALE', '0942255023', 'hwyk@demo.com');

运行此命令 docker-compose up 后,

我的docker-machine IP是 192.168.99.100 .我可以访问tomcat的 http://192.168.99.100:8080 ,但是无法访问我的应用程序 http://192.168.99.100:8080/myapp .是 404 .

My docker-machine ip is 192.168.99.100. I can access http://192.168.99.100:8080 of tomcat, but I cannot acess my app http://192.168.99.100:8080/myapp. It was 404.

我可以使用 MySQL Work Branch 从主机访问 docker的mysql .在 MySQL Work Branch 中,我看到了 my-test-app 数据库.但没有 EMPLOYEE 表.

I can access docker's mysql from my host by using MySQL Work Branch. In MySQL Work Branch, I see my-test-app database. but There is no EMPLOYEE table.

Tomcat&mysql安装成功.但是我的 war init sql脚本不好.我的 docker-compose.yml

Tomcat & Mysql are successfuly install. But my war and init sql script are not OK. Is there any missing config in my docker-compose.yml

推荐答案

对于数据库:

For the Database:

也许您遇到了与此处所述相同的问题: https://stackoverflow.com/a/36348572/8221303

Maybe you run in the same problem as described here: https://stackoverflow.com/a/36348572/8221303

1..首先运行此命令以删除当前容器:

1. At first run this to delete the current containers:

docker-compose rm -vf

2..从撰写文件中删除数据库名称.

2. Remove database name from compose file.

3..像这样修改数据库创建文件:

3. Modify your database creation file like this:

CREATE DATABASE `my-test-app`;
USE my-test-app;

CREATE TABLE EMPLOYEE (
  EMPLOYEE_ID BIGINT(20) NOT NULL AUTO_INCREMENT,
  NAME VARCHAR(65) NOT NULL,
  DOB DATETIME DEFAULT NULL,
  GENDER VARCHAR(10) NOT NULL,
  MOBILE VARCHAR(65) DEFAULT NULL,
  EMAIL VARCHAR(60) DEFAULT NULL,
  PRIMARY KEY (EMPLOYEE_ID)
) ENGINE=INNODB DEFAULT CHARSET=UTF8MB4;


INSERT INTO EMPLOYEE (NAME, DOB, GENDER, MOBILE, EMAIL) VALUES ("Zaw Than Oo", '1986-12-02', 'MALE', '09420000773', 'zawthanoo@cycdemo.com');
INSERT INTO EMPLOYEE (NAME, DOB, GENDER, MOBILE, EMAIL) VALUES ("Myo Thiha Kyaw", '1990-10-25', 'MALE', '0942568971', 'mthk@cycdemo.com');
INSERT INTO EMPLOYEE (NAME, DOB, GENDER, MOBILE, EMAIL) VALUES ("Htet Wai Yan Kyaw", '1991-12-15', 'MALE', '0942025023', 'hwyk@cycdemo.com');

4..再次运行Docker-Compose.容器启动时,您应该在标准输出中看到以下内容:

4. Run Docker-Compose again. When the containers are starting you should see something like this in the stdout:

/usr/local/bin/docker-entrypoint.sh: running /docker-entrypoint-initdb.d/DB_INIT.sql

对于Tomcat:

For the Tomcat:

也许您的应用程序由于数据库问题而无法运行.但是,如果没有,您可以尝试以下操作:

Maybe your application does not run because of the DB problem. But if not you can try the following:

首先,请检查WAR文件是否已正确部署.通过以下方式连接到容器bash:

At first check if the WAR file is deployed correctly. Connect to the container bash via:

docker exec -it tomcat bash

检查webapps目录中是否存在带有已部署文件的war文件:

Check if there is the war file with the deployed one in the webapps directory:

 /usr/local/tomcat/webapps/

这篇关于使用docker-compose.yml的tomcat + mysql + war的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆