herzou
herzou

Reputation: 11

Docker container failed to start when deploying to Google Cloud Run

I am new to GCP, and am trying to teach myself by deploying a simple R script in a Docker container that connects to BigQuery and writes the system time. I am following along with this great tutorial: https://arbenkqiku.github.io/create-docker-image-with-r-and-deploy-as-cron-job-on-google-cloud

So far, I have:

1.- Made the R script

library(bigrquery)
library(tidyverse)

bq_auth("/home/rstudio/xxxx-xxxx.json", email="[email protected]")

project = "xxxx-project"
dataset = "xxxx-dataset"
table = "xxxx-table"

job = insert_upload_job(project=project, data=dataset, table=table, write_disposition="WRITE_APPEND",
                values=Sys.time() %>% as_tibble(), billing=project)

2.- Made the Dockerfile

FROM rocker/tidyverse:latest

RUN R -e "install.packages('bigrquery', repos='http://cran.us.r-project.org')"

ADD xxxx-xxxx.json /home/rstudio

ADD big-query-tutorial_forQuestion.R /home/rstudio

EXPOSE 8080

CMD ["Rscript", "/home/rstudio/big-query-tutorial.R", "--host", "0.0.0.0"]

3.- Successfully run the container locally on my machine, with the system time being written to BigQuery

4.- Pushed the container to my container registry in Google Cloud

When I try to deploy the container to Cloud Run (fully managed) using the Google Cloud Console I get this error: 

"Cloud Run error: Container failed to start. Failed to start and then listen on the port defined by the PORT environment variable. Logs for this revision might contain more information. Logs URL:https://console.cloud.google.com/logs/xxxxxx"

When I review the log, I find these noteworthy entries:

1.- A warning that says "Container called exit(0)"

2.- Two bugs that say "Container Sandbox: Unsupported syscall setsockopt(0x8,0x0,0xb,0x3e78729eedc4,0x4,0x8). It is very likely that you can safely ignore this message and that this is not the cause of any error you might be troubleshooting. Please, refer to https://gvisor.dev/c/linux/amd64/setsockopt for more information."

When I check BigQuery, I find that the system time was written to the table, even though the container failed to deploy.

When I use the port specified in the tutorial (8787) Cloud Run throws an error about an "Invalid ENTRYPOINT".

What does this error mean? How can it be fixed? I'd greatly appreciate input as I'm totally stuck!

Thank you!

Upvotes: 1

Views: 1311

Answers (2)

guillaume blaquiere
guillaume blaquiere

Reputation: 75735

The comment of John is the right source of the errors: You need to expose a webserver which listen on the $PORT and answer to HTTP/1 HTTP/2 protocols.

However, I have a solution. You can use Cloud Build for this. Simply define your step with your container name and the args if needed

Let me know if you need more guidance on this (strange) workaround.

Upvotes: 2

Pentium10
Pentium10

Reputation: 207893

Log information "Container Sandbox: Unsupported syscall setsockopt" from Google Cloud Run is documented as an issue for gVisor.

Upvotes: 0

Related Questions