运行 在 Dockerfile 中与手动时的不同问题。出了什么问题?

Different problems when run in Dockerfile vs. manually. What's gone wrong?

我正在尝试为 CiviCRM 创建一个可靠的 Docker 图像,因为 Docker 中心中有 none 与自述文件或可读 Docker 文件捆绑在一起构建代码。唯一有据可查的图像不符合标准 Docker 约定。这是项目:https://github.com/djcf/civibuild-docker

因此,我编写了这个 Docker 文件,它使用 CiviCRM buildkit 进行标准安装。唯一的问题是它不起作用。大约一周前我让它工作了,但现在我为构建它所做的一切都没有成功。 (在我第一次尝试在 Docker 中安装 Civi 时,我什至尝试重新 运行 将 buildkit 提交当前 - https://raw.githubusercontent.com/civicrm/civicrm-buildkit/666d74d1e862957986e3b91c3206e3717d7058a1/bin/civi-download-tools - 运气不好。

Docker文件非常简单。

FROM colstrom/fish:ubuntu
# (this adds the Friendly Interactive Shell to Ubuntu 14.04

ENV CIVITYPE drupal-clean
ENV CMS_ROOT /buildkit/build
ENV SITE_NAME "Civi"
ENV SITE_ID "civi"
ENV TMPDIR /buildkit/tmp

RUN apt-get update; apt-get install -y curl links ssmtp
RUN curl -Ls https://civicrm.org/get-buildkit.sh | bash -s -- --full --dir /buildkit

COPY dbconf.sh /buildkit
COPY postinstall.sh /buildkit

# This is the problem part -- 
# but it makes three different errors depending on what environment its run.
RUN /buildkit/bin/civibuild create civicrm --type drupal-clean --url http://localhost:80 --admin-pass 123

RUN apt-get install -y runit
RUN /buildkit/postinstall.sh; apt-get clean; rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

VOLUME /buildkit/build
VOLUME /var/lib/mysql

EXPOSE 80

ENTRYPOINT ["/usr/sbin/docker-entrypoint.sh"]

dbconf.sh 预安装脚本确保 MySQL 是 运行ning,并复制脚本所需的一些配置。特别是它确保 amp 可以与 MySQL 对话,amp 具有与 MySQL 对话的正确设置,并且 bower 将接受 root 用户 运行。

奇怪的是。

当我 运行 构建脚本 (docker build -t civibuild .) 时,构建在 buildkit 构建命令的 开始 处失败: 步骤 15 : 运行 /buildkit/dbconf.sh ; /buildkit/bin/civibuild 创建 civicrm --type drupal-clean --url http://localhost:80 --admin-pass 123

---> Running in 3f9999dbdb12
* Starting MySQL database server mysqld
 ...done.
* Checking for tables which need an upgrade, are corrupt or were 
not closed cleanly.
Finished running pr-configuration, will now install CiviCRM using buildkit buildscript.
ln: failed to create symbolic link 'bower': File exists
The command '/bin/sh -c /buildkit/dbconf.sh ; /buildkit    /bin/civibuild create civicrm --type drupal-clean --url    http://localhost:80 --admin-pass 123' returned a non-zero code: 1

所以我尝试 运行 在香草 Ubuntu 14.04 Docker 图像中手动执行相同的步骤 (docker 运行 --it ubuntu:14.04 /bin/bash).这次 Civi 构建大约进行了一半,然后出现错误:

CiviCRM was isntalled successfully                 [ok]
/buildkit/app/config/drupal-clean/install.sh: line 42: 17650    
Segmentation fault      (core dumped) drush -y dis overlay

然后我尝试在 Vagrant 图像中手动 运行 完全相同的步骤。这次脚本成功完成。

解决方案最终被追踪到一个无效的 docker 构建缓存。在之前的 运行 中,Bower 安装失败,缓存中的符号链接错误。

解决方案:运行 使用 docker 构建 --no-cache。