Sim*_*Sca 10 docker dockerfile docker-entrypoint
这是我纯粹好奇的问题:
我必须个性化 Docker 映像,特别是这是我的 dockerfile 的摘录:
ARG DEFAULT_PHP_VERSION
FROM php:${DEFAULT_PHP_VERSION:+${DEFAULT_PHP_VERSION}-}fpm-alpine
# RUN some personal stuff
RUN rm -rf /var/www/html
# Set proper Entrypoint
COPY build/fs/usr/local/bin/my-entrypoint.sh /usr/local/bin/my-entrypoint.sh
RUN chmod +x /usr/local/bin/my-entrypoint.sh
ENTRYPOINT [ "my-entrypoint.sh" ]
WORKDIR /var/www
Run Code Online (Sandbox Code Playgroud)
并且my-entrypoint.sh是:
#!/bin/sh
set -e
echo "Trying my-entrypoint with args: $@"
if [ ! -z "$XDEBUG_ENABLED" ] ; then
echo "Enabling XDEBUG"
docker-php-ext-enable xdebug
fi
# execute default entrypoint
echo "Execute Main:"
docker-php-entrypoint $@
echo "Main Done"
Run Code Online (Sandbox Code Playgroud)
原始图像PHP-FPM-ALPINE具有命令
CMD [ "php-fpm" ]
Run Code Online (Sandbox Code Playgroud)
我的问题是,当我运行这个图像时(好吧,我们正确运行容器,而不是图像,我知道),默认命令没有传递给my-entrypoint.sh,实际上输出是:
Trying my-entrypoint with args:
Enabling XDEBUG
Execute Main:
Main Done
Run Code Online (Sandbox Code Playgroud)
也就是说 ENTRYPOINT 没有收到默认命令php-fpm,因此主进程自动停止。
但是如果我修改 dockerfileCMD在末尾添加:
ARG DEFAULT_PHP_VERSION
FROM php:${DEFAULT_PHP_VERSION:+${DEFAULT_PHP_VERSION}-}fpm-alpine
# RUN some personal stuff
RUN rm -rf /var/www/html
# Set proper Entrypoint
COPY build/fs/usr/local/bin/my-entrypoint.sh /usr/local/bin/my-entrypoint.sh
RUN chmod +x /usr/local/bin/my-entrypoint.sh
ENTRYPOINT [ "my-entrypoint.sh" ]
CMD ["php-fpm"]
WORKDIR /var/www
Run Code Online (Sandbox Code Playgroud)
一切顺利(即 CMD 被传递到入口点):
Trying my-entrypoint with args: php-fpm
Enabling XDEBUG
Execute Main:
Run Code Online (Sandbox Code Playgroud)
CMD ["php-fpm"]为什么如果我更改指令我必须重新声明ENTRYPOINT?
请注意,这
CMD ["php-fpm"]与原始图像中的相同。
这是从前一个图像继承值时的例外情况之一。如果父图像定义了 a CMD,并且您的图像定义了 a ENTRYPOINT,则 的值CMD将被清零。在所有其他情况下,您应该看到ENTRYPOINT从CMD父级图像继承的图像没有变化。有关此决定背后的逻辑,请参阅Issue 5147。
| 归档时间: |
|
| 查看次数: |
8291 次 |
| 最近记录: |