在 Docker 中安装 GCP Profiler 代理时遇到问题

Posted

技术标签:

【中文标题】在 Docker 中安装 GCP Profiler 代理时遇到问题【英文标题】:Trouble in installing GCP Profiler agent in Docker 【发布时间】:2019-12-06 15:29:50 【问题描述】:

我正在尝试为我在 GKE 中运行的应用安装 GCP Profiler 代理,请按照此处的说明进行操作:https://cloud.google.com/profiler/docs/profiling-java

我无法克服这个错误。有人可以帮忙吗?

在 /opt/cprof/profiler_java_agent.so 中找不到代理库 绝对路径,有错误:重定位错误 /opt/cprof/profiler_java_agent.so:__pthread_key_create:initial-exec TLS 解析为动态定义 /opt/cprof/profiler_java_agent.so

这是 Dockerfile

FROM openjdk:8-jdk-alpine
RUN apk update && apk add --no-cache gcompat
RUN apk update && apk add --no-cache libc6-compat

WORKDIR /app

# The application's jar file
ARG JAR_FILE=target/example-svc-*.jar

# Add the application's jar to the container
ADD $JAR_FILE example-svc.jar

EXPOSE 5050

RUN mkdir -p /opt/cprof && \
  wget -q -O- https://storage.googleapis.com/cloud-profiler/java/latest/profiler_java_agent.tar.gz \
  | tar xzv -C /opt/cprof

ENTRYPOINT ["java", \
    "-agentpath:/opt/cprof/profiler_java_agent.so=-cprof_service=example-svc,-cprof_service_version=0.0.1-SNAPSHOT", \
    "-jar", "/app/example-svc.jar"]

【问题讨论】:

【参考方案1】:

问题似乎是您正在使用的容器映像的基本版本。查看您的 Dockerfile,您从以下位置开始:

openjdk:8-jdk-alpine

深入研究这个文档,我们发现:

需要注意的主要警告是它确实使用 musl libc 而不是 glibc 和朋友,因此某些软件可能会遇到问题,具体取决于 他们的 libc 要求的深度。

(参考:openjdk)

现在,如果我们查看找到 here 的 Google 文档,我们会发现定义了以下要求:

支持的操作系统:

使用 glibc 实现标准 C 库的 Linux 版本。

...这似乎是一个冲突。请尝试使用不基于 alpine 的 openjdk 映像的替代版本。

【讨论】:

感谢您指出这一点。 *-alpine 应该是最小的图像。你能推荐一些替代品吗? 如果我们看这里 ...hub.docker.com/_/openjdk ...我们发现您可以使用从 openjdk:8-jdk 提取的非高山版本虽然确实确实有 alpine 被记录为更小,如果它不适用于您手头的任务,那么它对您毫无用处。与其开始优化性能和大小,不如开始优化功能正确性......从那里开始......只有在需要时,您才能进行调整。 注明。感谢您的帮助。

以上是关于在 Docker 中安装 GCP Profiler 代理时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

如何在docker中安装vsftp

如何在ubunto中安装docker

如何在 sles 12 中安装 docker?

如何在高山容器中安装 Docker?

Linux中安装Docker,在Docker中安装MySQL和Redis并在Windows下连接访问

在Ubuntu中安装Docker和docker的使用