Docker 码头工人:入口点';什么是CMD规范?
这是我纯粹好奇的一个问题: 我必须对Docker图像进行个性化设置,特别是这是我Docker文件的摘录:Docker 码头工人:入口点';什么是CMD规范?,docker,dockerfile,docker-entrypoint,Docker,Dockerfile,Docker Entrypoint,这是我纯粹好奇的一个问题: 我必须对Docker图像进行个性化设置,特别是这是我Docker文件的摘录: 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
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
而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"
原始图像是包含命令的PHP-FPM-ALPINE
CMD [ "php-fpm" ]
我的问题是,当我运行此映像时(好的,我们正确地运行了容器,而不是映像,我知道),默认命令没有传递到My entrypoint.sh
,实际上输出是:
Trying my-entrypoint with args:
Enabling XDEBUG
Execute Main:
Main Done
也就是说,入口点不接收默认命令php fpm
,因此主进程自动停止
但是如果我修改dockerfile,在末尾添加CMD
:
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
一切正常(即CMD被传递到entrypoint):
最后,我的问题是:
如果我更改ENTRYPOINT
指令,为什么我必须重新声明CMD[“php fpm”]
请注意,CMD[“php fpm”]
在原始图像中是相同的
这是从以前的图像继承值时出现的异常情况之一。如果父映像定义了一个
CMD
,而您的映像定义了一个入口点
,则CMD
的值为空。在所有其他场景中,您应该看到继承自父映像的ENTRYPOINT
和CMD
没有改变。有关此决定背后的逻辑,请参见。如果docker文件中没有CMD[“php fpm”],您可以docker exec-它包含名称sh
,并检查docker php入口点是什么,应该位于/usr/local/bin/docker php入口点之类的位置。假设这正在改变,比较一下差异。否则,请尝试准确输出$@的内容,以查看有何区别。可能重复:
Trying my-entrypoint with args: php-fpm
Enabling XDEBUG
Execute Main: