【问题标题】:build docker image with circleci/php:7.3-cli-node-browsers使用 circleci/php:7.3-cli-node-browsers 构建 docker 镜像
【发布时间】:2021-09-30 22:45:55
【问题描述】:

我正在尝试在 docker 中构建一个映像,但在它编译后,我执行 docker-compose up 并退出。

我正在使用的 docker 文件包含以下说明:

FROM circleci/php:7.3-cli-node-browsers 

USER root

WORKDIR /var/www/html

RUN apt-get update && apt-get install -y \
        libpng-dev \
        zlib1g-dev \
        zip \
        curl \
    && docker-php-ext-install gd \
    && apt-get install -y zip \
    && apt-get install -y unzip \
    && apt-get install -y git \  
    && apt install -y libsqlite3-dev zlib1g-dev \ 
    && docker-php-ext-install bcmath && docker-php-ext-enable bcmath \
    && docker-php-ext-install pcntl \
    && apt-get install -y --no-install-recommends libmagickwand-dev \
    && docker-php-ext-install exif \
    && pecl install imagick \
    && docker-php-ext-enable imagick

RUN pecl install redis && docker-php-ext-enable redis

COPY .docker/vhost.conf /etc/apache2/sites-available/000-default.conf

RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

WORKDIR /var/www/html
COPY / /var/www/html

RUN composer self-update
RUN composer install -n --prefer-dist

RUN npm install

RUN npm run test 

RUN chmod -R 777 /var/www/html
RUN chmod -R o+w /var/www/html/storage

COPY docker-entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/docker-entrypoint.sh
RUN ln -s /usr/local/bin/docker-entrypoint.sh / # backwards compat
ENTRYPOINT ["docker-entrypoint.sh"]

这是一个 laravel 项目,带有节点和 Redis。任何想法为什么它不起作用?

提前感谢您的帮助。

【问题讨论】:

  • 运行时容器日志中有什么内容? docker-entrypoint.sh 脚本中有什么内容?
  • @DavidMaze docker-entrypoint.sh : #!/bin/sh env >> /etc/environment echo "--> 运行节点" #npm run prod echo "--> 运行 Artisan 缓存清除" php artisan route:clear php artisan cache:clear php artisan storage:link echo "--> 启动应用" # exec apache2 -D FOREGROUND exec apache2-foreground "$@"
  • 即使我删除 .sh 的行,它也不会运行
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。
  • 我已经使用包含 Apache 的不同图像解决了它。这就是问题所在(缺少 apache)

标签: php node.js docker docker-compose


【解决方案1】:

你的入口点终于调用apache,但你甚至没有在你的docker镜像中安装apache。

所以,你需要做下一步:

  • Dockerfile中安装apache2:

    RUN apt-get install -y apache2
    
  • docker-entrypoint.sh中正确启动apache2:

    echo "--> Starting app"
    . /etc/apache2/envvars
    mkdir -p /var/run/apache2
    exec apache2 -D FOREGROUND
    

【讨论】:

  • 在构建映像时出现下一个错误:#22 [18/18] RUN ln -s /usr/local/bin/docker-entrypoint.sh / #向后兼容 #22 0.261 ln : 未能创建符号链接 '/docker-entrypoint.sh': 文件存在 #22 错误: 执行程序运行失败 [/bin/sh -c ln -s /usr/local/bin/docker-entrypoint.sh / # 向后兼容]: 退出代码: 1 ------ > [18/18] RUN ln -s /usr/local/bin/docker-entrypoint.sh / #向后兼容: ------
  • 与原始问题相比有哪些变化?你提到你之前已经完成了构建......你提到问题来自容器运行时 docker-compose up,你能先澄清一下吗?
  • 它在没有 docker-entrypoint.sh 命令的情况下构建。这一行 RUN ln -s /usr/local/bin/docker-entrypoint.sh / #向后兼容是给我的问题。 @atline
  • 我查看了你的图片,circleci/php:7.3-cli-node-browsers 中已经有一个docker-entrypoint.sh,内容为#!/bin/sh Xvfb :99 -screen 0 1280x1024x24 & exec "$@" ......那么,你为什么需要这个ln -s?我觉得没什么用。
  • 或者,如果您坚持,您可以在该命令之前添加RUN rm -f /docker-entrypoint.sh。我仍然认为你不需要做那个符号链接。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-16
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 2020-10-06
  • 2018-04-29
相关资源
最近更新 更多