You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Google Cloud VM容器以适配自定义docker run命令?

Google Cloud VM中配置Artifact Registry镜像的COMMAND/ARG设置

本地运行命令

我本地运行Docker镜像的命令是:

docker run --rm -d -p 80:80 mkdocs:latest nginx -g 'daemon off;'

遇到的问题

在使用Artifact Registry中的该镜像配置Google Cloud VM时,不知道如何正确设置COMMAND/ARG部分,尝试两种方法均失败:

  • 将完整的docker run --rm -d -p 80:80 mkdocs:latest nginx -g 'daemon off;'作为COMMAND,无法正常运行;
  • 设置nginx、-g 'daemon off;'作为ARG,但不知道如何传递mkdocs:latest、-d、-p 80:80这些参数,同样无效。

另外,我尝试通过SSH连接VM也未能成功。

对应的Dockerfile

# MkDocs container
FROM python:3-alpine AS build-env

RUN apk add bash
RUN apk add --no-cache make cmake
ENV PATH="${PATH}:/usr/src/mkdocs/.local/bin"

RUN pip install --upgrade pip
RUN pip install pymdown-extensions \
&& pip install mkdocs \
&& pip install mkdocs-techdocs-core \
&& pip install mkdocs-material \
&& pip install mkdocs-rtd-dropdown \
&& pip install mkdocs-git-revision-date-plugin \
&& pip install mkdocs-git-revision-date-localized-plugin \
&& pip install mkdocs-redirects \
&& pip install mkdocs-video

ENV PATH="${PATH}:/usr/src/mkdocs/.local/bin"
RUN mkdir -p /home/mkdocs/
WORKDIR /home/mkdocs/
# Added for cloud run
COPY . .
RUN mkdocs build
WORKDIR /
ENTRYPOINT ["/usr/src/mkdocs/.local/bin/mkdocs"]

# Nginx container
FROM nginx:1.21.6-alpine
RUN apk add bash
EXPOSE 80

ENV USER=myuser
ENV UID=7579
ENV GID=7579

RUN addgroup --gid "$GID" "$USER" && adduser --disabled-password --gecos "" --home "$(pwd)" --ingroup "$USER" --no-create-home --uid "$UID" -G "$USER" "$USER"

RUN cat /etc/nginx/nginx.conf
COPY nginx.conf /etc/nginx/nginx.conf

WORKDIR /
RUN mkdir -p /home/mkdocs
COPY --from=build-env /home/mkdocs/site/ /home/mkdocs/
RUN mv /home/mkdocs/* /usr/share/nginx/html/
RUN chown nginx:nginx /usr/share/nginx/html/*

RUN mkdir /tmp/nginx && chown nginx:nginx /tmp/nginx

USER nginx:nginx

解决方案

1. 明确Docker命令各参数的作用

先拆解你本地的docker run命令,对应到GCP VM配置的不同环节:

  • --rm:容器退出后自动删除,GCP VM的容器生命周期由VM管理,无需额外设置;
  • -d:让容器后台运行,GCP VM运行容器默认就是后台模式,不用单独配置;
  • -p 80:80:端口映射,需分两步处理:
    • 给VM配置防火墙规则,开放80端口(允许外部访问VM的80端口);
    • 创建VM时添加--container-ports 80参数,确保容器的80端口映射到VM的80端口(你的Dockerfile已经EXPOSE 80,只需这一步即可);
  • mkdocs:latest:镜像名称,需替换为Artifact Registry的完整路径,格式为[REGION]-docker.pkg.dev/[PROJECT-ID]/[REPO-NAME]/mkdocs:latest,比如us-central1-docker.pkg.dev/my-project/my-repo/mkdocs:latest;
  • nginx -g 'daemon off;':容器启动时执行的命令,用来覆盖镜像默认启动逻辑。

2. 正确设置COMMAND/ARG

在GCP VM的容器配置中:

  • 镜像地址:填写Artifact Registry的完整镜像路径(不要用本地的mkdocs:latest);
  • COMMAND:直接设置为nginx -g "daemon off;"(用双引号避免转义问题),或者数组形式["nginx", "-g", "daemon off;"]。
  • 不需要把完整的docker run命令作为COMMAND,GCP会自动处理镜像拉取、容器启动等逻辑,你只需指定容器启动后要执行的命令。

3. SSH连接失败的解决办法

逐一检查以下项:

  • VM是否有外部IP地址:内部IP无法直接从外部SSH连接;
  • 防火墙规则是否开放22端口:确保有允许你的IP或0.0.0.0/0访问22端口的规则;
  • SSH密钥配置:创建VM时是否添加了你的SSH公钥,或者使用gcloud compute ssh [VM-NAME]命令自动生成密钥;
  • 网络标签:如果VM用了自定义标签,需确保防火墙规则的目标标签包含该标签。

内容的提问来源于stack exchange,提问作者Marcus Anthony

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 14:15:41