GVKun编程网logo

使用Palantir Gradle插件构建Docker容器时找不到.jar文件

24

在本文中,我们将给您介绍关于使用PalantirGradle插件构建Docker容器时找不到.jar文件的详细内容,此外,我们还将为您提供关于(Docker)获取错误:docker-php-sourc

在本文中,我们将给您介绍关于使用Palantir Gradle插件构建Docker容器时找不到.jar文件的详细内容,此外,我们还将为您提供关于(Docker)获取错误:docker-php-source:构建docker文件时没有这样的文件或目录、Android gradle插件v3.3.0->使用Proguard时找不到R $raw、Android的Docker容器:Gradle构建守护进程意外消失(它可能已被杀死或崩溃)、CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统的知识。

本文目录一览:

使用Palantir Gradle插件构建Docker容器时找不到.jar文件

使用Palantir Gradle插件构建Docker容器时找不到.jar文件

如果我尝试在Windows 10下使用Spring Boot应用程序构建Docker容器,则会出现以下错误:

> Task :docker FAILEDCOPY failed: stat /var/lib/docker/tmp/docker-builder711841135/myproject.jar: no such file or directory

我正在使用版本为18.03.0-ce-win59(16762)和Java的Gradle 4.7的Docker Community Edition。

build.gradle (缩短):

plugins {    id ''java''    id ''org.springframework.boot'' version ''2.0.1.RELEASE''    id "com.palantir.docker" version "0.19.2"}version = ''2.0.0''sourceCompatibility = 1.8group = "com.example"repositories {    mavenCentral()}bootJar {    archiveName ''myproject.jar''}dependencies {    ...}docker {    dependsOn(build)    name "${project.group}/${jar.baseName}"    files bootJar}

Dockerfile (顶级项目目录中的 build.gradle 兄弟):

FROM openjdk:8-jreCOPY build/libs/myproject.jar myproject.jarENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/myproject.jar"]

如果我仅使用Docker(不使用Gradle)构建Docker容器,则它可以工作。

如何让Gradle(或Docker?)找到文件myproject.jar?

答案1

小编典典

问题是COPYDocker文件中的命令:

COPY build/libs/myproject.jar myproject.jar

源目录build/libs/不是用于构建Docker容器的文件所在的位置。而是将该目录build/docker/用作Docker构建上下文。当COPY执行时,该目录是有效的工作目录。

正确的COPY命令是如此简单:

COPY myproject.jar /

Docker任务:

docker {    dependsOn bootJar    name "${project.group}/${jar.baseName}:${version}"    files bootJar.archivePath}

如果也要复制资源,则需要添加processResourcesfiles参数:

files bootJar.archivePath, processResources

(Docker)获取错误:docker-php-source:构建docker文件时没有这样的文件或目录

(Docker)获取错误:docker-php-source:构建docker文件时没有这样的文件或目录

当我尝试在https://github.com/docker-library/php/blob/3f43309a0d5a427f54dc885e0812068ee767c03e/7.1/Dockerfile处构建docker文件时

命令:docker build -t PHP_image.

我正在考虑以下错误:

Step 14 : copY docker-PHP-source /usr/local/bin/
lstat docker-PHP-source: no such file or directory

有人能帮我弄清楚这里有什么不对吗?

谢谢

解决方法:

您没有docker构建的正确上下文.

只需克隆repo以确保拥有所有文件(及其正确的权限):

git clone https://github.com/docker-library/PHP
docker build . -t PHP_image

但是如果你需要自定义该图像,那么根据官方版本制作自己的Dockerfile会更容易:

FROM PHP:7
RUN #your commands 
RUN ...

Android gradle插件v3.3.0->使用Proguard时找不到R $raw

Android gradle插件v3.3.0->使用Proguard时找不到R $raw

刚更新为Android Gradle插件版本3.3.0

我们有以下设置(不确定哪个很重要):

>具有3个库模块(数据,域,utils)的应用程序项目(app)
>启用数据绑定(databinding.enabled为true)
>启用Proguard(proguardFiles’proguard-rules.pro’)

当我使用以下方式构建应用程序时:

./gradlew assembleDevRelease

我收到以下错误:

找不到引用的类my.package.data.R $raw

当我使用以下方式构建应用程序时:

./gradlew:app:assembleDevRelease

该应用程序构建良好,生成了一个模糊的* .apk,我可以安装它

题:

> assembleRelease和:app:assembleRelease有什么区别

-为什么切换到android gradle插件3.3.0会影响构建apk必须调用的任务?我们在CI管道的任何地方都使用assembleRelease来构建apk.

> android gradle插件3.3.0中发生了什么更改,导致任务assembleRelease中断?我们在CI管道的任何地方都使用assembleRelease来构建apk.
>关于如何使’assembleRelease’重新工作的任何建议? (更新Proguard配置?,启用R8?)

最佳答案

What’s the difference between assembleRelease and :app:assembleRelease

前者在相对于当前级别的所有模块上运行assembleRelease任务.后者仅在应用程序模块(及其依赖项)上运行它.

Why does switching to android gradle plugin 3.3.0 affect which task I have to call to build my apk? We use assembleRelease everywhere in our CI pipelines to build our apks.

该问题没有足够的信息可以肯定地说,但是release notes中列出了许多更改.例如,此问题可能与以下方面有关:

Faster R class generation for library projects: PrevIoUsly,the Android Gradle plugin would generate an R.java file for each of your project’s dependencies and then compile those R classes alongside your app’s other classes. The plugin Now generates a JAR containing your app’s compiled R class directly,without first building intermediate R.java classes. This optimization may significantly improve build performance for projects that include many library subprojects and dependencies,and improve the indexing speed in Android Studio.

Android的Docker容器:Gradle构建守护进程意外消失(它可能已被杀死或崩溃)

Android的Docker容器:Gradle构建守护进程意外消失(它可能已被杀死或崩溃)

我试图在Docker容器上构建android,每次./gradlew assembleDebug都出现此错误

:saltside-android:transformClassesWithDexForBikroyDebugThe message received from the daemon indicates that the daemon has disappeared.
Build request sent: BuildAndStop{id=81f2e456-bb5b-4cf8-9190-3c8b22e286b6.1, currentDir=/app/project-main}
Attempting to read last messages from the daemon log…
Daemon pid: 35
log file: /root/.gradle/daemon/3.3/daemon-35.out.log
—– Last 20 lines from daemon log file – daemon-35.out.log —–
:saltside-android:processBugsnagBikroyDebugManifest
:saltside-android:processBikroyDebugResources
:saltside-android:generateBikroyDebugSources
:saltside-android:incrementalBikroyDebugJavaCompilationSafeguard
:saltside-android:javaPreCompileBikroyDebug
:saltside-android:compileBikroyDebugJavaWithJavacNote: Some input files use or override a deprecated API.
Note: Recompile with -Xlint:deprecation for details.
Note: Some input files use unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
:
:saltside-android:compileBikroyDebugNdk UP-TO-DATE
:saltside-android:compileBikroyDebugSources
:saltside-android:mergeBikroyDebugShaders
:saltside-android:compileBikroyDebugShaders
:saltside-android:generateBikroyDebugAssets
:saltside-android:mergeBikroyDebugAssets
:saltside-android:processBugsnagBikroyDebugProguard
:saltside-android:transformClassesWithJarMergingForBikroyDebug
:saltside-android:transformClassesWithMultidexlistForBikroyDebug
:saltside-android:transformClassesWithDexForBikroyDebug
—– End of the daemon log —–
:
FAILURE: Build Failed with an exception.
:
* What went wrong:
Gradle build daemon disappeared unexpectedly (it may have been killed or may have crashed)
:
* Try:
Run with –stacktrace option to get the stack trace. Run with –info or –debug option to get more log output.

我已经增加了内存并在gradle.properties中禁用了守护程序,就像这样

    org.gradle.jvmargs=-Xmx4608m -XX:MaxPermSize=2048m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
org.gradle.daemon=false

任何人都知道有什么解决方案吗?

解决方法:

我得到了解决方案,但仍在写答案,以便任何机构都遇到同样的问题并可以解决.
这是由于docker容器的内存大小所致,我使用的是Mac,看来问题仅出在Mac机器上.
在默认情况下,mack上的容器大小为2GB,您可以使用free命令检查docker容器.因此将其增加到4GB或更多,繁荣解决您的问题即可.

Docker->Preferences->Advanced->Memory

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

利用docker compose组合应用并利用scale可以快速对容器进行扩充,而docker compose启动的服务容器都在同一台宿主机上,对于一个宿主机上运行多个容器应用时,容器的运行情况,如:cpu使用率,内存使用率,网络状态,磁盘空间等一系列随时间变化的时序数据信息,都需要进行了解,因此监控是必须的。

容器监控方案选择

对于容器的监控方案可谓多种多样,除了docker本身自带的 docker stats 命令,还有Scout,Data Dog,Sysdig Cloud,Sensu Monitoring Framework,CAdvisor等都可以对容器进行监控。

通过 docker stats 命令可以很方便的看到当前宿主机上所有容器的cpu,内存,以及网络流量等数据。但 docker stats 命令的缺点是只是统计当前宿主机的所有容器,获取的数据是实时的,没有地方存储,也没有报警功能。

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

而Scout,Data Dog,Sysdig Cloud虽然都提供了较完善的服务,但是它们都是托管的服务且都是收费的,Sensu Monitoring Framework集成度较高,也免费,但是部署过于复杂,综合考虑选择CAdvisor做监控工具。

CAdvisor出自Google,优点是开源产品,监控指标齐全,部署方便,而且有官方的docker镜像。缺点是集成度不高,默认只在本地保存2分钟数据。不过,可以加上InfluxDB存储数据,对接Grafana展示图表,比较便利搭建容器监控系统,数据收集和图表展示效果良好,对系统性能也几乎没什么影响。

CAdvisor + InfluxDB + Grafana搭建容器监控系统

CAdvisor

CAdvisor是一个容器资源监控工具,包括容器的内存,cpu,网络IO,磁盘IO等,同时提供了一个WEB页面用于查看容器的实时运行状态。CAdvisor默认存储2分钟的数据,而且只是针对单物理机,不过,CAdvisor提供了很多数据集成接口,支持InfluxDB,Redis,Kafka,Elasticsearch等集成,可以加上对应配置将监控数据发往这些数据库存储起来。

CAdvisor功能主要有两点,展示Host,容器两个层次的监控数据和展示历史变化

InfluxDB

InfluxDB是用Go语言编写的一个开源分布式时序,事件和指标数据库,无需外部依赖。

由于CAdvisor默认只在本地保存最近2分钟的数据,为了持久化数据和统一收集展示监控数据,需要将数据存储到InfluxDB中。InfluxDB是一个时序数据库,专门用于存储时序相关数据,很适合存储CAdvisor数据,而且CAdvisor本身提供了InfluxDB集成的方法,在启动容器时指定配置即可。

InfluxDB主要功能:

  • 基于时间序列,支持与时间有关的相关函数

  • 可度量性,可以实时对大量数据进行计算

  • 基于事件,支持任意的事件数据

InfluxDB主要特点:

  • 无结构

  • 可以是任意数量的列

  • 可拓展

  • 支持min,max等一系列的函数,方便统计

  • 原生的HTTP支持,内置HTTP API

  • 强大的类sql语法

Granfana

Grafana是一个开源的数据监控分析可视化平台,支持多种数据源配置(如InfluxDB,MySQL,Elasticserach,OpenTSDB,Graphite等)和丰富的插件及模板功能,支持图表权限控制和报警。

Grafana主要特点

  • 灵活丰富的图形化选项

  • 可以混合多种风格

  • 支持白天和夜间模式

  • 多数据源

CAdvisor负责收集容器随时间变化的数据

InfluxDB负责存储时序数据

Grafana负责分析和展示时序数据

安装部署

部署InfluxDB服务

启动InfluxDB的服务容器:

docker run -d --name influxdb -p 8086:8086 \
-v /data/influxdb:/var/lib/influxdb \
--hostname influexdb \
influxdb

在容器中创建test数据库和root用户

docker exec -it influxdb influx
> CREATE DATABASE "test"
> CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

部署CAdvisor

启动CAdvisor的服务容器:

docker run \
 --volume=/:/rootfs:ro \
 --volume=/var/run:/var/run:ro \
 --volume=/sys:/sys:ro \
 --volume=/var/lib/docker/:/var/lib/docker:ro \
 --volume=/dev/disk/:/dev/disk:ro \
 --publish=8080:8080 \
 --detach=true \
 --name=cadvisor \
 google/cadvisor:latest \
 -storage_driver=influxdb \
 -storage_driver_host=influxdb:8086 \
 -storage_driver_db=test \
 -storage_driver_user=root \
 -storage_driver_password=root

服务容器起来后可通过浏览器访问 http:///ip:8080

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

部署Grafana

启动Grafana服务容器:

docker run -d -p 3000:3000 \
-v /data/grafana:/var/lib/grafana \
--link=influxdb:influxdb \
--name grafana grafana/grafana

直接运行该命令后有可能会发现容器并没有启起来,通过 docker logs 命令会发现”mkdir: can’t create directory ‘/var/lib/grafana/plugins’: Permission denied“的错误,其实就是没有 数据卷对应的主机上 /data/grafana 的权限,可以在运行启动命令前先创建 /data/grafana 目录并给定权限777,或者通过”docker run —entrypoint “id” grafana/grafana“ 查看uid,gid,groups (默认为472),然后通过”chown -R 472:472 /data/grafana“修改权限。

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

Grafana正常启动后就可以 http://ip:3000 访问,出现以下的登录页面,初次访问需要修改密码,默认用户名密码为:admin/admin

Docker Compose集成部署

准备docker-compose.yml文件

version: '3.1'
volumes:
 grafana_data: {}
services:
 influxdb:
   image: influxdb
   restart: always
   environment:
     - PRE_CREATE_DB=cadvisor
   ports:
     - "8086:8086"
   expose:
     - "8090"
     - "8099"
   volumes:
     - ./data/influxdb:/data
 cadvisor:
   image: google/cadvisor
   links:
     - influxdb:influxdb-host
   command: -storage_driver=influxdb -storage_driver_db=cadvisor -storage_driver_host=influxdb-host:8086
   restart: always
   ports:
     - "8080:8080"
   volumes:
     - /:/rootfs:ro
     - /var/run:/var/run:rw
     - /sys:/sys:ro
     - /var/lib/docker:/var/lib/docker:ro
 grafana:
   user: "104"
   image: grafana/grafana
   restart: always
   links:
     - influxdb:influxdb-host
   ports:
     - "3000:3000"
   volumes:
     - grafana_data:/var/lib/data
   environment:
     - HTTP_USER=admin
     - HTTP_PASS=admin
     - INFLUXDB_HOST=influxdb-host
     - INFLUXDB_PORT=8086
     - INFLUXDB_NAME=cadvisor
     - INFLUXDB_USER=root
     - INFLUXDB_PASS=root

在docker-compose.yml文件目录运行以下命令启动服务:

docker-compose up -d

-d指定在后台启动,初次启动可以不加可以在控制台查看启动日志,当然后台启动也可以通过“docker-compose logs”进行查看启动日志。

服务正常启动后就可以 http://ip:3000 访问Granafa,在Home Dashboard页面点击添加data source

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

配置InfluxDB连接信息,当然在配置连接信息前需要进入InfluxDB容器创建相应的cadvisor数据库和用户root/root

在容器中创建cadvisor数据库和root用户

docker exec -it influxdb-contianer-id influx
> CREATE DATABASE "cadvisor"
> CREATE USER "root" WITH PASSWORD 'root' WITH ALL PRIVILEGES

配置连接InfluxDB连接:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

数据源配好之后可以回到Home Dashboard添加添加dashboard图表展示监控信息,Grafana提供了丰富的图片模板对监控数据进行展示。

添加dashboard:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

可选模板:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

编辑图表:

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

配置监控cadvisor容器的内存使用情况的图表展示,配置好之后点击保存就可以了。

CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注小编行业资讯频道,感谢您对小编的支持。

今天关于使用Palantir Gradle插件构建Docker容器时找不到.jar文件的分享就到这里,希望大家有所收获,若想了解更多关于(Docker)获取错误:docker-php-source:构建docker文件时没有这样的文件或目录、Android gradle插件v3.3.0->使用Proguard时找不到R $raw、Android的Docker容器:Gradle构建守护进程意外消失(它可能已被杀死或崩溃)、CAdvisor + InfluxDB + Grafana是怎么搭建Docker容器监控系统等相关知识,可以在本站进行查询。

本文标签: