我正在构建我的GAE(flex)项目作为许多服务:
- my-project/
- services/
- service_1/
- service_1.yaml
- service_2/
- service_2.yaml
我现在想在服务之间分享一些代码。理想情况下,我希望对服务有一个my-project/lib/
和符号链接:
my-project/services/service_1/lib -> ../../lib
my-project/services/service_2/lib -> ../../lib
但是gcloud app deploy
(我从yaml
文件所在的服务目录运行)忽略了符号链接(我在上传之前检查了tgz
文件得到了GAE for部署并且lib/
不存在。)
那么,有没有办法分享lib/
代码(除了将其拉入自己的库并使用pip
安装)?
答案 0 :(得分:1)
复制我的类似问题的答案。 Multiple services with different dockerfiles on GAE Flexible
tl; dr:构建一个单独的docker映像,将其推送到GCR,然后使用该映像进行部署。
指定自定义运行时。 在本地构建图像,对其进行标记,然后将其推送到Google Container Registry(GCR) 然后,部署服务,指定自定义服务文件,并使用--image-url选项在GCR上指定远程映像。
下面是一个示例,该示例在共享相同代码的2个服务中完成不同的入口点: ...这是假设正在使用“ flex”而非“标准”的应用程序引擎产品。
让我们说您有一个名为 my-proj 的项目 使用不重要的默认服务 第二个服务叫做 queue-processor ,该服务正在使用同一目录中的许多相同代码。 为它创建一个单独的dockerfile,名为 QueueProcessorDockerfile 以及名为 queue-processor-app.yaml 的单独app.yaml来告诉Google App Engine我想要发生什么。
QueueProcessorDockerfile
FROM node:10
# Create app directory
WORKDIR /usr/src/app
COPY package.json ./
COPY yarn.lock ./
RUN npm install -g yarn
RUN yarn
# Bundle app source
COPY . .
CMD [ "yarn", "process-queue" ]
*当然,我的package.json中有一个“ process-queue”脚本
queue-processor-app.yaml
runtime: custom
env: flex
... other stuff...
...
答案 1 :(得分:0)
使用符号链接跨服务共享代码的方法可能不适用于基于docker的flex环境。这种怀疑是基于Troubleshooting Custom Runtimes的最后一行表格
问题
- 我的应用程序中未包含某些文件。
解决方案
- 当源树或包装系统添加到基本映像时,Docker不遵循符号链接,因此外部的所有源文件 您的应用程序目录中的符号链接引用的目录 源树不会被复制到您的应用程序中。
此外 - dependencies in the flex environment应该基于用于在部署时构建dockerfile的requirements.txt
文件,而不是基于pip
将它们安装到{{1 dir是the standard environment way。
答案 2 :(得分:0)
我想出了另一种解决方案,似乎是一堆糟糕的替代方案中最好的一种……这是我所排除的:
我的解决方案是创建以下两行bash脚本:
rm -rf deploy_dir
cp -RLp code_dir deploy_dir
它将所有我的代码复制到一个新目录,并且在复制过程中,所有符号链接都被替换为它们链接到的文件。然后,我从deploy_dir