[英]Docker extend entrypoint script from docker-compose
我对 Docker 很陌生。
我对我的 Laravel 应用程序进行了 docker 化。 这是基本图像php:8.1.2-apache
在 Dockerfile 结束时,我使用自己的入口点脚本
ENTRYPOINT ["/usr/local/bin/start"]
该脚本( /usr/local/bin/start
)包含一些命令,例如
composer install --no-interaction &&
php artisan config:cache &&
php artisan route:cache &&
php artisan view:cache &&
php artisan storage:link
现在我将这个 Docker Image 用于许多事情,如 laravel 调度程序、队列等......
我想要做的是从 docker-compose 文件扩展入口点脚本,这样每当容器启动时,入口点脚本首先被执行,然后最终将从 docker-compose 传递的主命令被执行。
就像是:
laravel-scheduler:
image: laravel
container_name: laravel-scheduler
restart: always
volumes:
- .:/var/www/html
command: php artisan schedule:work
第一的
您可以创建 build_entrypoint.sh
#!/bin/bash
composer install --no-interaction &&
php artisan config:cache &&
php artisan route:cache &&
php artisan view:cache &&
php artisan storage:link
并在基础 Dockerfile 中使用它ENTRYPOINT ["./build_entrypoint.sh"]
在 docker-compose 中,您可以覆盖行为:在命令部分手动启动/build_entrypoint.sh
+ 扩展命令
类似command: /bin/sh -c "./build_entrypoint.sh && ./test_running.sh"
.
第二:漂亮
使用基于主 php 映像的守护程序在 docker-compose 中启动新服务。
码头工人/php/Dockerfile
FROM php:8.1-fpm
# ... others commands (setup composer and php-ext(s))
# Attention! We run this command to build our image
RUN composer install --no-interaction &&
php artisan config:cache &&
php artisan route:cache &&
php artisan view:cache &&
php artisan storage:link
码头工人-compose.yml
# Main php service
php:
build:
context: docker/php # path to your dockerfile
volumes:
- .:/var/www/html
# PHP WORKER service with daemon work
php-worker:
build:
context: docker/php # path to your dockerfile
volumes:
- .:/var/www/html
command: php artisan schedule:work
只需使用exec "$@"
结束入口点脚本。 它将遵循 Compose command:
完全按照您描述的方式。
#!/bin/sh
# Do first-time setup steps that can't be done in the Dockerfile
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan storage:link
# Run the main container command
exec "$@"
另请参阅 Dockerfile 文档中的了解 CMD 和 ENTRYPOINT 如何交互: CMD
(或 Compose command:
覆盖)作为参数传递给您的入口点脚本。 exec "$@"
调用是一个 shell 命令,用这些命令行参数替换当前 shell。
另一个重要的警告是,在 Dockerfile 中, ENTRYPOINT
必须是 JSON-array exec 形式。 如果它是裸字符串外壳形式,外壳包装会阻止它工作。 您在问题中显示的语法是正确的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.