Gsutil在Google Compute Engine的Dockerfile中不起作用

亚伦瓦加斯

我对Docker有点陌生,我试图将资源从云存储桶复制到使用Docker映像创建的实例。gsutil在我的以下使用Dockerfile

# Install Google Cloud tools - Debian https://cloud.google.com/storage/docs/gsutil_install#deb
ENV CLOUD_SDK_REPO="cloud-sdk-stretch"
RUN echo "deb http://packages.cloud.google.com/apt $CLOUD_SDK_REPO main" | \
    tee -a /etc/apt/sources.list.d/google-cloud-sdk.list && \
    curl https://packages.cloud.google.com/apt/doc/apt-key.gpg | apt-key add - && \
    apt-get update && apt-get install -y google-cloud-sdk

# Setup Google Service Account
COPY service-account.json /etc/
ENV GOOGLE_APPLICATION_CREDENTIALS="/etc/service-account.json"

RUN gcloud auth activate-service-account --key-file=${GOOGLE_APPLICATION_CREDENTIALS}

# Copy the last updated ssl config
RUN gsutil cp -r gs://my-project.appspot.com/docker/etc/letsencrypt /etc/ && \
    gsutil cp -r gs://my-project.appspot.com/docker/etc/apache2/sites-available /etc/apache2/

当我在本地计算机上运行此文件时,可以使用gsutil正确复制文件。(它们在我运行docker映像时存在)

当我部署到Google Container Registry并在GCE实例上使用docker映像时,正在运行的docker映像上不存在这些文件。

我从Google构建日志中可以看到gsutil似乎工作正常并且正在复制文件(在构建过程中)。

我究竟做错了什么?这是一个错误吗?

任何帮助表示赞赏!

达兹·威尔金

我怀疑文件在其中/etc/但是从代码片段中尚不清楚您运行映像时映像的作用。

RUN您上面显示步骤仅在构建映像时运行。RUN用于执行安装和构建在容器中运行的软件所需的步骤。Run从映像创建容器时,步骤不运行。

因此,如果在期间正确复制了文件,则在docker build运行该映像时它们将出现。您要在哪里制作图片?生成映像后,将其部署到任何地方(包括部署到GCR),然后运行该映像,将不会影响您显示的步骤(因为它们是在映像创建期间运行的)。

从显示的结果来看,不清楚运行图像时会发生什么。如果这是您整个Dockerfile的全部内容,那么当您使用时,什么也不会发生docker run

注意:您的方法具有安全隐患。拥有图像的任何人都可以访问您的服务帐户密钥。对于包括键(可能还包括键/letsencrypt/)和您的配置的数据,优良作法是在docker run时间上通常使用卷引用它们

我是否假定您要使用该映像运行Apache?

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章