在Dockerfile中手动运行时遇到的问题。 出了什么问题?

我正在尝试为CiviCRM创build一个可靠的Docker镜像,因为Docker中心没有与README或可读的Dockerfile构build代码捆绑在一起。 唯一有文档logging的图片不符合标准的Docker约定。 这是项目: https : //github.com/djcf/civibuild-docker

所以,我写了这个Dockerfile,它使用CiviCRM buildkit安装标准安装。 唯一的问题是它不起作用。 我曾经在一个星期左右的时间里工作过,但现在我没有做任何工作来成功。 (我甚至尝试在我第一次尝试在Docker中安装Civi时重新运行buildkit commit current – https://raw.githubusercontent.com/civicrm/civicrm-buildkit/666d74d1e862957986e3b91c3206e3717d7058a1/bin/civi-download-tools – – 没有运气。

Dockerfile非常简单。

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正在运行,并通过脚本所需的某些configuration进行复制。 特别是它确保放大器可以与MySQL交谈,放大器具有与MySQL交谈的正确设置,并且该放大器将接受由root用户运行。

现在这是好奇的事情。

当我运行buildscript(docker build -t civibuild)时,构build在buildkit build命令开始时失败:第15步:运行/buildkit/dbconf.sh; / buildkit / bin / civibuild create 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 

所以我尝试在vanilla Ubuntu 14.04 Docker镜像(docker run –it ubuntu:14.04 / bin / bash)中手动运行EXACT THE SAME STEPS。 这一次,Civi版本的差错大概是一半:

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

然后,我尝试在stream浪汉图像中手动运行“完全相同的步骤”。 这次脚本成功完成。

该解决scheme最终被追溯到一个无效的docker构buildcaching。 在之前的运行中,bower未能安装,caching保留了一个糟糕的符号链接。

解决scheme:使用docker build –no-cache运行。