- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试自动化在 docker 容器上部署 tomcat webapps 的 .war 的过程。为此,我开发了一个示例 spring boot 应用程序以用作测试。由于我的最终目标是将该过程应用于现有的旧 war 应用程序,因此我将应用程序配置为生成 war 文件而不是嵌入了 tomcat 的 jar。
示例应用程序只是一个带有 /greeting?id=<id>
的示例 Spring MVC 应用程序仅返回带有“Hello”消息的页面的端点,其中是从 mysql 数据库上的表中读取的字符串。应用程序部署在基于 tomcat 基础镜像的 Docker 容器上,而数据库部署在单独的 mysql 容器上。
当通过 docker-compose
启动两个容器时脚本,部署似乎成功了:两个容器正在运行,tomcat 实例处于 Activity 状态,容器日志中没有错误消息可见,我可以在 http://<IP>:8082/manager/html
的 tomcat 管理器界面中看到已部署并标记为正在运行的 webapp .问题是在 http://<IP>:8082/myapp-sample-webapp/greeting?id=<id>
我收到 404 错误。我测试了 test.html
Web 应用程序中的静态文件,这在 http://<IP>:8082/myapp-sample-webapp/test.html
处可见.
另请注意,如果我将应用程序配置为嵌入 tomcat 的 jar 应用程序(当然也相应地更改 Dockerfile 配置),我可以访问 /greeting?id=<id>
端点没有问题。
一个附带的问题是我看不到任何应用程序生成的日志(无论是在带有 docker logs ...
的 docker 容器日志中,还是在我为应用程序日志配置的 /usr/local/tomcat/logs/myapp-sample-webapp.log
日志文件中(参见下面的 application.properties
),这使我无法检查问题是否与 mysql 数据库连接失败有关。
这是应用程序的 pom.xml 文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>eu.myapp</groupId>
<artifactId>myapp-sample-webapp</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>war</packaging>
<name>myapp-sample-webapp</name>
<description>Project created for testing Docker packaging of a .war web application</description>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.4.0.RELEASE</version>
<relativePath /> <!-- lookup parent from repository -->
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
<docker.image.prefix>myapp-h2020</docker.image.prefix>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.10</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-rest</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-devtools</artifactId>
<optional>true</optional>
</dependency>
</dependencies>
<build>
<finalName>${project.artifactId}</finalName>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<version>1.2.1</version>
<configuration>
<mainClass>${main.class}</mainClass>
</configuration>
</plugin>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>com.spotify</groupId>
<artifactId>docker-maven-plugin</artifactId>
<version>0.2.3</version>
<configuration>
<imageName>${docker.image.prefix}/${project.artifactId}:${project.version}</imageName>
<dockerDirectory>src/main/docker</dockerDirectory>
<resources>
<resource>
<targetPath>/</targetPath>
<directory>${project.build.directory}</directory>
<include>${project.build.finalName}.war</include>
</resource>
</resources>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>spring-snapshots</id>
<name>Spring Snapshots</name>
<url>https://repo.spring.io/snapshot</url>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
<repository>
<id>spring-milestones</id>
<name>Spring Milestones</name>
<url>https://repo.spring.io/milestone</url>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
</repositories>
</project>
这是主 Controller 类:
@Controller
public class GreetingController {
@Autowired
private RecordRepository repository;
@RequestMapping("/greeting")
public String greeting(@RequestParam(value="id", required=true ) Integer id, Model model) {
Record record = repository.findById(id);
String name = ( record == null ? "World" : record.getName() );
model.addAttribute("name", name);
return "greeting" ;
}
}
这是主应用程序(命令行运行程序是在最初以 tomcat 嵌入式模式测试应用程序时编写的):
编辑:我按照亚历克斯评论的建议更新了类(class)
@SpringBootApplication
public class MyAppSampleWebappApplication extends SpringBootServletInitializer {
private static final Logger log = LoggerFactory.getLogger(MyAppSampleWebappApplication.class);
// JAR
public static void main(String[] args) {
System.out.println("Starting MyAppSampleWebappApplication (JAR)...");
log.debug("Starting MyAppSampleWebappApplication (JAR)...");
SpringApplication.run(MyAppSampleWebappApplication.class, args);
}
//WAR
@Override
protected SpringApplicationBuilder configure(SpringApplicationBuilder application) {
System.out.println("Starting MyAppSampleWebappApplication (WAR)...");
log.debug("Starting MyAppSampleWebappApplication (WAR)...");
return application.sources(MyAppSampleWebappApplication.class);
}
}
这是我文件的 application.properties:
# datasource
spring.jpa.database-platform=org.hibernate.dialect.MySQL5InnoDBDialect
spring.datasource.driverClassName=com.mysql.jdbc.Driver
# for the moment I hardcoded references to mysql database, to replace with info from
# environment variable on "real" version
spring.datasource.url=jdbc:mysql://<IP OF HOST MACHINE>:3306/myapp-demo
spring.datasource.username=myapp
spring.datasource.password=myapp
spring.jpa.hibernate.ddl-auto=update
spring.data.jpa.repositories.enabled=true
spring.jpa.show-sql=true
logging.level.=DEBUG
logging.file=/usr/local/tomcat/logs/myapp-sample-webapp.log
这是通过 mvn build:docker
使用的 Dockerfile为我的应用程序生成图像:
FROM tomcat
ADD tomcat-users.xml /usr/local/tomcat/conf
ADD myapp-sample-webapp.war /usr/local/tomcat/webapps/
CMD ["catalina.sh", "run"]
最后,docker-compose
启动两个容器的文件:
# container for an external mysql service
sample-mysql:
image: mysql:latest
environment:
MYSQL_ROOT_PASSWORD: p4SSW0rd
MYSQL_DATABASE: myapp-demo
MYSQL_USER: myapp
MYSQL_PASSWORD: myapp
ports:
- 3306:3306
# myapp-sample-webapp web application container:
myapp-sample-webapp:
image: myapp-h2020/myapp-sample-webapp:0.0.1-SNAPSHOT
ports:
- 8082:8080
最佳答案
我想我已经找到了解决方案:
在我的 Dockerfile 中,我在 tomcat
上构建了我的应用程序镜像基本图像(“FROM tomcat
”)
我发现这个图像是基于 JRE 7 的,而在我的 pom.xml 中,我的 Java 版本是 1.8 (<java.version>1.8</java.version>
)
通过将 Dockerfile 的第一行替换为更具体的版本“FROM tomcat:7-jre8
”,我现在可以看到由我的 Controller 生成的页面。
关于java - 在 tomcat Docker 容器上部署 .war,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39699872/
我正在使用以下dockerfile: FROM ubuntu:14.04 MAINTAINER xxx xxx # SSH RUN apt-get update && apt-get install
我运行了docker-compose build celery,(经过数小时的尝试,我的连接不良)成功了。 app Dockerfile的前80%是相同的,但不会重复使用缓存。从我可以浏览的内容来看,
我可以使用以下命令成功创建 Docker 注册表 v2 服务:docker service create 然后我使用 docker Push 将一些图像推送到该服务。 当我通过 curl localh
我正在尝试使用 gitlab 构建 CI,我从 docker 的 docker 镜像开始,我的前端存储库没有任何问题,但现在使用相同的 gitlab-ci 配置文件,我有此守护程序错误。 这是构建的输
用例: 我们在 Jenkins 中有几个“发布作业”build 和 push 应用程序的 Docker 镜像到 docker registry,更新各种文件中的项目版本,最后将发布标签推送到相应的 G
当我尝试构建我的 docker 文件时,docker 返回以下错误: [+] Building 0.0s (1/2)
docker-in-docker 的作者在此博客中建议不要将此图像用于 CI 目的: jpetazzo/Using Docker-in-Docker for your CI or testing en
我创建了一个 Dockerfile 来在 Docker 中运行 Docker: FROM ubuntu:16.04 RUN apt-get update && \ apt-get in
我尝试为 Docker 镜像定位一个特定标签。我怎样才能在命令行上做到这一点?我想避免下载所有图像,然后删除不需要的图像。 在 Ubuntu 官方版本中,https://registry.hub.do
我正在尝试在docker中运行docker。唯一的目的是实验性的,我绝不尝试实现任何功能,我只想检查docker从另一个docker运行时的性能。 我通过Mac上的boot2docker启动docke
docker-compose.yml version: "3" services: daggr: image: "docker.pvt.com/test/daggr:stable"
我有一个非常具体的开发环境用例。在一些代码中,我启动了一个容器来抓取页面并检索在容器中运行的服务(Gitlab)的 token 。 现在,我希望 Dockerize 运行它的代码。具体来说,类似: o
之前已经问过这个问题,但我不确定当时是否可以使用docker-compose文件完成docker堆栈部署。 由于最新版本支持使用compose将服务部署到堆栈,因此,我无法理解dab文件的值。 我检查
我在一次采访中被问到这个问题,但无法回答。也没有找到任何相关信息。 最佳答案 正如 Docker 文档中所述,Docker 注册表是: [...] a hosted service containin
有没有一种方法可以将具有给定扩展名的所有文件复制到Docker中的主机?就像是 docker cp container_name:path/to/file/in/docker/*.png path/o
我的日志驱动程序设置为journald。使用日志记录驱动程序时,daemon.json文件中的日志级别配置会影响日志吗?使用docker logs 时仅会影响容器日志? 例如,docker和journ
我最近开始使用Docker + Celery。我还共享了full sample codes for this example on github,以下是其中的一些代码段,以帮助解释我的观点。 就上下文
运行docker build .命令后,尝试提交构建的镜像,但收到以下错误 Step 12 : CMD activator run ---> Using cache ---> efc82ff1ca
我们有docker-compose.yml,其中包含Kafka,zookeeper和schema registry的配置 当我们启动docker compose时,出现以下错误 docker-comp
我是Docker的新手。是否可以在Docker Hub外部建立Docker基本镜像存储库?假设将它们存储在您的云中,而不是拥有DH帐户?谢谢。 最佳答案 您可以根据需要托管自己的注册表。可以在Depl
我是一名优秀的程序员,十分优秀!