我的应用程序与私有BitBucket存储库具有Git依赖关系。
my_package:
git:
url: git@bitbucket.org:myuser/mypackage.git
当我跑步时
gcloud --verbosity debug preview app run app.yaml
我得到了
Resolving dependencies...
Git error. Command: git clone --mirror git@bitbucket.org:myuser/my_package.git /root/.pub-cache/git/cache/my_package-6fe77906161a7a9252973e29e39a4149b75f9a7e
error: cannot run ssh: No such file or directory
fatal: unable to fork
我想向ADD
添加Dockerfile
指令是一种可行的解决方法
需要将repo签出到本地目录以使其正常工作。
我试过了:
FROM google/dart-runtime
ADD ../my_package ../my_package
https://docs.docker.com/reference/builder/#add说
The <src> path must be inside the context of the build; you cannot ADD
../something /something, because the first step of a docker build is to
send the context directory (and subdirectories) to the docker daemon.
似乎我必须将..my_package
目录移动到my_app
目录中。这不是很美: - (
当我向Dockerfile
run
添加虚假行时失败,但如果我添加ADD ...
指令,则似乎完全被忽略。
答案 0 :(得分:4)
我之前的解决方案仍然非常不方便,因为我必须在每次重新启动应用程序之前办理登机手续。
在很大的支持下,我找到了一个更方便的解决方案。 而不是符号链接我挂载目录。有关详细信息,请参阅https://superuser.com/questions/842642。 我不知道这是否以及如何在其他oSes上工作(Win,OX X,...)
我将../my_package
挂载到docker/my_package
(而不是符号链接)并使用此Dockerfile:
FROM google/dart
WORKDIR /app
ENV DART_SDK /usr/lib/dart
ADD dart_run.sh /dart_runtime/
RUN chmod 755 /dart_runtime/dart_run.sh && \
chown root:root /dart_runtime/dart_run.sh
ADD pubspec.yaml /app/
ADD pubspec.lock /app/
ADD docker/my_package /my_package
RUN pub get
ADD . /app/
RUN pub get --offline
## Expose ports for debugger (5858), application traffic (8080)
## and the observatory (8181)
EXPOSE 8080 8181 5858
CMD []
ENTRYPOINT ["/dart_runtime/dart_run.sh"]
虽然.git
是一个更方便的解决方案,但它只是提供了已签出包的git-daemon
目录。
我所要做的就是根据https://www.dartlang.org/cloud/的文档设置所有内容,并在pubspec.yaml
中使用git依赖关系来为git-daemon提供的这个repo。
my_package:
git:
url: git://192.168.2.96/my_package
ref: test
此URL在本地工作时以及Docker容器中工作。
我可以用这个Dockerfile运行我的应用程序
FROM google/dart
WORKDIR /app
RUN \
apt-get update && \
apt-get install -y openssh-client
ADD tool/bitbucket_deployment_key /root/.ssh/id_rsa
RUN \
mkdir -p /root/.ssh && \
echo "Host bitbucket.org" >> /root/.ssh/config && \
echo " StrictHostKeyChecking no" >> /root/.ssh/config && \
# ssh-keyscan -t rsa -H bitbucket.org,131.103.20.167 >> /root/.ssh/known_hosts && \
chmod 400 /root/.ssh/id_rsa && \
eval $(ssh-agent) && \
ssh-add /root/.ssh/id_rsa
RUN \
git clone git@bitbucket.org:myuser/my_package.git /my_package --branch test && \
rm /root/.ssh/id_rsa
#ENV DART_SDK /usr/lib/dart
ADD dart_run.sh /dart_runtime/
RUN chmod 755 /dart_runtime/dart_run.sh && \
chown root:root /dart_runtime/dart_run.sh
ADD pubspec.yaml /app/
ADD pubspec.lock /app/
RUN pub get
ADD . /app/
RUN pub get --offline
# Expose ports for debugger (5858), application traffic (8080)
# and the observatory (8181)
EXPOSE 8080 8181 5858
CMD []
ENTRYPOINT ["/dart_runtime/dart_run.sh"]
我使用ssh-keygen创建了id_rsa
而没有密码短语。这是我在git clone
命令后从图像中删除文件的原因。无论如何,它之后都没有使用。
在我的BitBucket仓库中,我添加了id_rsa.pub
作为部署密钥。
答案 1 :(得分:0)
道歉,将此作为答案添加但如果没有更多声誉则无法发表评论:
如果您希望修复此问题,请在google-cloud-sdk问题93上投票:
https://code.google.com/p/google-cloud-sdk/issues/detail?id=93