Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-cloud-platform/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Docker 试图在谷歌云上安装日志,但它';他失败了_Docker_Google Cloud Platform_Dockerfile_Logback_Google Cloud Run - Fatal编程技术网

Docker 试图在谷歌云上安装日志,但它';他失败了

Docker 试图在谷歌云上安装日志,但它';他失败了,docker,google-cloud-platform,dockerfile,logback,google-cloud-run,Docker,Google Cloud Platform,Dockerfile,Logback,Google Cloud Run,我正试图按照这些说明正确地从java登录到logback再到cloudrun 如果我使用jdk8,我会发现alpn缺少jetty问题,所以我转向Docker映像openjdk:10jre-slim 我的DockerFile很简单 FROM openjdk:10-jre-slim RUN mkdir -p ./webpieces COPY . ./webpieces/ COPY config/logback.cloudrun.xml ./webpieces/config/logback.xml

我正试图按照这些说明正确地从java登录到logback再到cloudrun

如果我使用jdk8,我会发现alpn缺少jetty问题,所以我转向Docker映像openjdk:10jre-slim

我的DockerFile很简单

FROM openjdk:10-jre-slim
RUN mkdir -p ./webpieces
COPY . ./webpieces/
COPY config/logback.cloudrun.xml ./webpieces/config/logback.xml
WORKDIR "/webpieces"
ENTRYPOINT ./bin/customerportal -http.port=:$PORT -hibernate.persistenceunit=cloud-production
唯一的区别是我切换了openjdk的图像:8-jdk-alpine,效果很好

当我部署到谷歌云时,我得到了这个错误

Deploying container to Cloud Run service [staging-customerportal] in project [orderly-gcp] region [us-west1]
⠏ Deploying... Cloud Run error: Invalid argument error. Invalid ENTRYPOINT. [name: "gcr.io/orderly-gcp/customerportal2@sha256:6c1c2e7531684d8f50a3120f1de60cade841ab1d9069b
704ee3fd8499c5b7779"
error: "Invalid command \"/bin/sh\": file not found"
]. 
X Deploying... Cloud Run error: Invalid argument error. Invalid ENTRYPOINT. [name: "gcr.io/orderly-gcp/customerportal2@sha256:6c1c2e7531684d8f50a3120f1de60cade841ab1d9069b
 704ee3fd8499c5b7779"
error: "Invalid command \"/bin/sh\": file not found"
].
 . Routing traffic...


Deployment failed
ERROR: (gcloud.run.deploy) Cloud Run error: Invalid argument error. Invalid ENTRYPOINT. [name: "gcr.io/orderly-gcp/customerportal2@sha256:6c1c2e7531684d8f50a3120f1de60cade841ab1d9069b704ee3fd8499c5b7779"
error: "Invalid command \"/bin/sh\": file not found"
 ].
然而,当我在本地运行以进行测试时,我在项目ID上得到了这个错误,所以它似乎正在工作。附带问题:如何模拟此项目ID,以便我仍然可以在本地运行

03:10:08,650 |-INFO in ch.qos.logback.core.joran.action.AppenderAction - Naming appender as [CLOUD]
03:10:09,868 |-ERROR in ch.qos.logback.core.joran.spi.Interpreter@14:13 - RuntimeException in Action for tag [appender] java.lang.IllegalArgumentException: A project ID is required for this service but could not be determined from the builder or the environment.  Please set a project ID using the builder.
at java.lang.IllegalArgumentException: A project ID is required for this service but could not be determined from the builder or the environment.  Please set a project ID using the builder.
at  at com.google.common.base.Preconditions.checkArgument(Preconditions.java:142)
at  at com.google.cloud.ServiceOptions.<init>(ServiceOptions.java:285)
at  at com.google.cloud.logging.LoggingOptions.<init>(LoggingOptions.java:98)
at  at com.google.cloud.logging.LoggingOptions$Builder.build(LoggingOptions.java:92)
at  at com.google.cloud.logging.LoggingOptions.getDefaultInstance(LoggingOptions.java:52)
at  at com.google.cloud.logging.logback.LoggingAppender.getLoggingOptions(LoggingAppender.java:246)
at  at com.google.cloud.logging.logback.LoggingAppender.getProjectId(LoggingAppender.java:209)
at  at com.google.cloud.logging.logback.LoggingAppender.start(LoggingAppender.java:194)
at  at ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
at  at ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
at  at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
at  at ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
at  at ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
at  at ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)
03:10:08650 |-ch.qos.logback.core.joran.action.AppenderAction中的信息-将appender命名为[CLOUD]
03:10:09868 |-ch.qos.logback.core.joran.spi中存在错误。Interpreter@14:13-标记[appender]java.lang.IllegalArgumentException的运行时异常:此服务需要项目ID,但无法从生成器或环境中确定。请使用生成器设置项目ID。
位于java.lang.IllegalArgumentException:此服务需要项目ID,但无法从生成器或环境中确定。请使用生成器设置项目ID。
位于com.google.common.base.premissions.checkArgument(premissions.java:142)
位于com.google.cloud.ServiceOptions。(ServiceOptions.java:285)
在com.google.cloud.logging.LoggingOptions上
登录com.google.cloud.logging.LoggingOptions$Builder.build(LoggingOptions.java:92)
在com.google.cloud.logging.LoggingOptions.getDefaultInstance(LoggingOptions.java:52)上
在com.google.cloud.logging.logback.LoggingAppender.getLoggingOptions(LoggingAppender.java:246)上
在com.google.cloud.logging.logback.LoggingAppender.getProjectId(LoggingAppender.java:209)上
在com.google.cloud.logging.logback.LoggingAppender.start(LoggingAppender.java:194)上
位于ch.qos.logback.core.joran.action.AppenderAction.end(AppenderAction.java:90)
位于ch.qos.logback.core.joran.spi.Interpreter.callEndAction(Interpreter.java:309)
位于ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:193)
位于ch.qos.logback.core.joran.spi.Interpreter.endElement(Interpreter.java:179)
位于ch.qos.logback.core.joran.spi.EventPlayer.play(EventPlayer.java:62)
位于ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:165)
位于ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:152)
位于ch.qos.logback.core.joran.GenericConfigurator.doConfigure(GenericConfigurator.java:110)

由于您当前的问题是如何模拟本地测试的项目ID:

您应该从下载服务帐户密钥文件,使其在docker容器内可访问,并通过

gcloud auth activate-service-account --key-file my_service_account.json

gcloud config set project MY_PROJECT

Java10版本是EOL,官方图像已被删除。更多细节

更喜欢Java11版本

无论如何,当您使用版本时,有些是经过优化的,默认情况下不安装
bash
(用于减小其大小),您必须自己安装

对于本地运行,由于安全约束、密钥轮换、安全存储等原因,我不建议使用JSON密钥文件(通常,不要使用JSON密钥文件,GCP之外的自动系统除外)


要设置项目,只需执行以下命令
gcloud config set project MY_project
。此操作不需要凭据。

此问题可能是由于alpine没有bash: “/bin/sh”因此,解决方案可以是通过不使用bash或使用exec而不是bash来删除对bash本身的依赖。 在我的例子中,我解决了这个问题,使用了一个更完整的基础图像,而不是阿尔卑斯山


HTH

我对本地运行的gcloud命令感到非常困惑?当我说本地运行时,我指的是“docker run gcr.io/orderied gcp/customerportal2”,所以我当时没有使用glcoud。从技术上讲,我指的是在docker容器内执行这些命令。因此,在Dockerfile中,添加到CMD行以执行它们,因此您获得密钥的服务帐户的标识将被使用@DeanHilleroh,很有趣。在进一步考虑这个问题时,我们现在只是将logback文件替换为本地Docker开发,作为一个更简单的解决方案,然后将日志写入容器中,它应该用于本地开发。