首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker从码头-撰写扩展入口点脚本

Docker从码头-撰写扩展入口点脚本
EN

Stack Overflow用户
提问于 2022-05-15 16:20:38
回答 2查看 812关注 0票数 1

我对码头很陌生。

我伪造了我的Laravel申请。这是基本图像php:8.1.2-apache

在Dockerfile的末尾,我使用了自己的入口点脚本

代码语言:javascript
复制
ENTRYPOINT ["/usr/local/bin/start"]

此脚本(/usr/local/bin/start)包含以下几个命令:

代码语言:javascript
复制
composer install --no-interaction && 
php artisan config:cache && 
php artisan route:cache && 
php artisan view:cache && 
php artisan storage:link

现在我用这个Docker映像来做很多事情,比如laravel调度器,队列等等.

我想要做的是从坞-撰写文件中扩展入口点脚本,以便每当容器启动时,首先执行入口点脚本,最后执行从docker传递的主命令。

类似于:

代码语言:javascript
复制
  laravel-scheduler:
    image: laravel
    container_name: laravel-scheduler
    restart: always
    volumes:
      - .:/var/www/html
    command: php artisan schedule:work
EN

回答 2

Stack Overflow用户

发布于 2022-05-15 16:40:01

First

您可以创建build_entrypoint.sh

代码语言:javascript
复制
#!/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"]

在停靠-撰写中,您可以重写以下行为:在命令部分,手动启动/build_entrypoint.sh +扩展命令

有点像command: /bin/sh -c "./build_entrypoint.sh && ./test_running.sh"

第二:漂亮的

在docker中启动一个新服务--根据主php映像与守护进程进行组合。

docker/php/Dockerfile

代码语言:javascript
复制
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

docker-compose.yml

代码语言:javascript
复制
# 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
票数 0
EN

Stack Overflow用户

发布于 2022-05-16 00:13:53

只需使用exec "$@"结束入口点脚本即可。它将以您所描述的方式来尊重撰写command:

代码语言:javascript
复制
#!/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和入口点是如何相互作用的CMD (或撰写command:覆盖)作为参数传递给您的入口点脚本。exec "$@"调用是一个shell命令,它用这些命令行参数替换当前的shell。

另一个重要的警告是,在Dockerfile中,ENTRYPOINT必须是JSON数组exec格式。如果它是裸字符串shell形式,则外壳包装会阻止它工作。你在问题中显示的语法是正确的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72250096

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档