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

时间:2016-02-02 01:02:47

标签: docker dockerfile civicrm

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

所以,我编写了这个Dockerfile,它使用CiviCRM buildkit安装标准安装。唯一的问题是它不起作用。我有一个星期左右的工作,但现在我没有做任何事情来建立它是成功的。 (我甚至尝试在我第一次尝试在Docker中安装Civi时重新运行buildkit提交当前 - 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正在运行,并复制脚本所需的一些配置。特别是它确保放大器可以与MySQL通信,该放大器具有与MySQL通信的正确设置,并且该放大器将接受由root用户运行。

现在这是一件好奇的事。

当我运行buildscript(docker build -t civibuild。)时,构建在buildkit build命令的开始处失败: 第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

所以我尝试在一个vanilla Ubuntu 14.04 Docker镜像中手动运行完全相同的步骤(docker run --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图像中手动运行EXACT SAME STEPS。这次脚本成功完成。

1 个答案:

答案 0 :(得分:1)

该解决方案最终被追溯到无效的docker构建缓存。在之前的一次运行中,bower无法安装,缓存保留了一个错误的符号链接。

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