docker - 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 映像上不存在文件。
我可以从谷歌构建日志中看到 gsutil 似乎工作正常并且正在复制文件(在构建过程中)。
我究竟做错了什么?这是一个错误吗?
任何帮助表示赞赏!
解决方案
我怀疑文件在其中,/etc/
但从片段中不清楚您的图像在运行时会做什么。
您在上面显示的RUN
步骤仅在构建映像时运行。RUN
用于运行安装和构建在容器中运行的软件所需的步骤。Run
从映像创建容器时,不会运行步骤。
因此,如果文件在 期间正确复制docker build
,它们将在该映像运行时出现。你在哪里构建图像?构建映像后,在任何地方部署(包括到 GCR)然后运行映像,不会影响您显示的步骤(因为它们是在映像创建期间运行的)。
从您显示的内容来看,尚不清楚运行图像时会发生什么。如果这是你的 Dockerfile 的全部,那么当你docker run
.
注意您的方法具有安全隐患。拥有该图像的任何人都可以访问您的服务帐户密钥。对于包括键(可能还有/letsencrypt/
)和您的配置的数据,最好在docker run
时间引用这些数据并且通常使用卷|挂载。
我是否假设您希望使用此映像运行 Apache?
推荐阅读
- junit - 如何在 Eclipse 中使用 Run As > SWTBot 测试运行 JUnit 5 测试
- r - ggplot facet的不同x轴
- r - 为什么在 R 中反序列化 xgboost 模型时出现此错误
- javascript - 如何使用地图洗牌数组
- c# - 查看页面未在 C#、MVC 5 中显示
- elixir - Elixir/Phoenix Framework 认证/授权
- excel - 如何使用vba在excel中粘贴存储在变量中的特殊数据
- opencv - 使用 opencv - traingulatePoints 单元从两个图像中确定 3d 位置
- bash - 如何更新我的 Spyder 3.3.6 版启动图标?
- python - python中dict值的条件计算