fri*_*day -1 php docker dockerfile docker-compose
我正在用我的 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
Run Code Online (Sandbox Code Playgroud)
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"]
Run Code Online (Sandbox Code Playgroud)
启动容器.sh 文件
#!/usr/bin/env bash
set -e
cd /var/www
php artisan optimize
php artisan view:cache
#composer install && composer dump-autoload
exec "$@"
Run Code Online (Sandbox Code Playgroud)
我还打印该 docker 映像的日志。
Configuration cached successfully!
Route cache cleared!
Routes cached successfully!
Files cached successfully!
Compiled views cleared!
Blade templates cached successfully!
Run Code Online (Sandbox Code Playgroud)
我认为我的错误是docker 容器在运行 start-container.sh file 后重新启动。当我谷歌搜索时,有些人使用PHP artisan脚本和 ENTRYPOINT sh 文件。
我应该怎么做才能避免使用 ENTRYPOINT sh 文件一次又一次地重新启动?
您的入口点脚本以行结尾exec "$@"。这会运行图像的CMD,并且通常是最佳实践。但是,您的映像没有CMD,因此该命令只是扩展为裸exec,这会导致主容器进程退出。
构建的镜像FROM php:fpm通常不会有CMD一行,因为基础镜像的Dockerfile指定了CMD ["php-fpm"];将您的应用程序代码写入派生映像就足够了COPY,并且基础映像CMD知道如何运行它。但是,ENTRYPOINT派生映像中的设置会CMD从基础映像中重置(请参阅Dockerfile 文档中讨论CMD和ENTRYPOINT的注释)。这意味着您需要重复基本图像的CMD:
ENTRYPOINT ["start-container.sh"]
CMD ["php-fpm"] # duplicated from base image, because you reset ENTRYPOINT
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2112 次 |
| 最近记录: |