【问题标题】:docker entrypoint sh file restartingdocker入口点sh文件重新启动
【发布时间】:2021-08-05 11:26:05
【问题描述】:

我正在用我的 php 项目测试 docker。测试中一切正常,但如果我添加 ENTRYPOINT,docker 正在重新启动。

这是我的 docker compose 文件

version: "3.7"
services:

#Laravel App
  app:
    build:
      args:
        user: maruan
        uid: 1000
      context: ./docker/7.4
      dockerfile: Dockerfile
   #  command: sh -c "start-container.sh"
    image: laravel-app
    restart: unless-stopped
    working_dir: /var/www/
    volumes:
      - ./:/var/www
    networks:
      - app-network
    
 #Nginx Service
  nginx:
    image: nginx:alpine
    restart: unless-stopped
    ports:
      - 8000:80
    volumes:
      - ./:/var/www
      - ./docker/7.4/nginx/conf.d:/etc/nginx/conf.d/default.conf
    networks:
      - app-network
  #Mysl Service
  db:
    image: mysql:8
    restart: unless-stopped
    environment:
      MYSQL_DATABASE: ${DB_DATABASE}
      MYSQL_ROOT_PASSWORD: ${DB_PASSWORD}
      MYSQL_PASSWORD: ${DB_PASSWORD}
      MYSQL_USER: ${DB_USERNAME}
    networks:
      - app-network
      
networks:
  app-network:
    driver: bridge

Dockerfile

FROM php:7.4-fpm

# Arguments defined in docker-compose.yml
ARG user
ARG uid

WORKDIR /var/www

ENV TZ=UTC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# Install system dependencies
RUN apt-get update \
    && apt-get install -y --no-install-recommends build-essential mariadb-client libfreetype6-dev libjpeg-dev libpng-dev libwebp-dev zlib1g-dev libzip-dev gcc g++ make vim unzip git jpegoptim optipng pngquant gifsicle locales libonig-dev \
    && docker-php-ext-configure gd  \
    && docker-php-ext-install gd \
    && apt-get install -y --no-install-recommends libgmp-dev \
    && docker-php-ext-install gmp \
    && docker-php-ext-install mysqli pdo_mysql zip \
    && docker-php-ext-enable opcache \
    && apt-get autoclean -y \
    && rm -rf /var/lib/apt/lists/* \
    && rm -rf /tmp/pear/


COPY . /var/www

# Get latest Composer
COPY --from=composer:latest /usr/bin/composer /usr/bin/composer


# Create system user to run Composer and Artisan Commands
RUN useradd -G www-data,root -u $uid -d /home/$user $user
RUN mkdir -p /home/$user/.composer && \
    chown -R $user:$user /home/$user

COPY start-container.sh /usr/local/bin/start-container.sh
RUN chmod +x /usr/local/bin/start-container.sh


ENTRYPOINT ["start-container.sh"]

启动容器.sh 文件

#!/usr/bin/env bash

set -e

cd /var/www  
php artisan optimize
php artisan view:cache
#composer install && composer dump-autoload

exec "$@"

我还打印该 docker 映像的日志。

Configuration cached successfully!
Route cache cleared!
Routes cached successfully!
Files cached successfully!
Compiled views cleared!
Blade templates cached successfully!

我认为我的错误是 docker 容器在运行 start-container.sh 文件后正在重新启动。当我 google 时,有些人使用 PHP artisan 脚本和 ENTRYPOINT sh 文件。

用ENTRYPOINT sh文件一次又一次重启应该怎么做?

【问题讨论】:

    标签: php docker docker-compose dockerfile


    【解决方案1】:

    您的入口点脚本以exec "$@" 行结束。这运行图像的CMD,通常是最佳实践。但是,您的图像没有CMD,因此该命令只是扩展为一个裸露的exec,这会导致主容器进程退出。

    FROM php:fpm 构建的映像通常不会有 CMD 行,因为基本映像的 Dockerfile 指定了 CMD ["php-fpm"];将您的应用程序代码COPY 转换为派生映像就足够了,基础映像的CMD 知道如何运行它。但是,在派生映像中设置ENTRYPOINT 会从基本映像重置CMD(请参阅Dockerfile documentation 中的注释,同时讨论CMDENTRYPOINT)。这意味着你需要重复基础镜像的CMD:

    ENTRYPOINT ["start-container.sh"]
    CMD ["php-fpm"] # duplicated from base image, because you reset ENTRYPOINT
    

    【讨论】:

    • 你打败了我
    • 哦!你救了我。谢谢你的解释
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-09-14
    • 1970-01-01
    • 1970-01-01
    • 2021-12-01
    • 2012-06-25
    • 2020-01-21
    • 1970-01-01
    相关资源
    最近更新 更多