繁体   English   中英

为什么 Python 对 Docker 入口点脚本不可用?

Why would Python not be available to a Docker Entrypoint Script?

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

这个 Python 3.9 项目有一个成功构建的 Dockerfile。 该文件使用ENTRYPOINT脚本来创建一些目录并在运行时处理一些清理工作。 它是一个 bash 脚本。 ENTRYPOINT脚本运行到最后都没有问题,预计它将执行接下来传递的CMD 好吧,我应该说这种行为只发生在Kaniko构建图像时。 本地构建镜像时,不会出现这样的问题。 但是,我愿意将其归结为本地位于 Windows 机器上的事实。 但是,这在这里无关紧要,因为抛出的错误是:

/opt/project/conf/entrypoint.sh: /usr/bin/supervisord: /usr/bin/python3: bad interpreter: No such file or directory
/opt/project/conf/entrypoint.sh: line 8: /usr/bin/supervisord: Success

现在我看了很多“糟糕的解释器”问题。 它们似乎都围绕着口译员在一个自定义的地方。 我依赖于 Python 3.9 解释器的默认位置。 在 Debian Bullseye(基本映像后面的操作系统)上,应该是/usr/local/bin/python/usr/local/bin/python3 所以我完全不知道为什么它无法找到或使用它。

以下是实现细节:

Dockerfile

FROM python:3.9-slim-bullseye

# Minimum Required Environment Variables
ENV SHELL=/bin/bash
ENV CC /usr/bin/gcc
ENV CXX /usr/bin/g++
ENV LANG=C.UTF-8
ENV DEBIAN_FRONTEND=noninteractive
ENV PYMSSQL_BUILD_WITH_BUNDLED_FREETDS=1
ENV PIP_CONFIG_FILE=/etc/pip.conf
ENV TZ=America/Los_Angeles

# Project Specific Environment Variables
ENV PROJECT_LOGFILE=/var/log/project/project.log
ENV PROJECT_CONFIG_DIRECTORY=/opt/project/conf
ENV PROJECT_SETTINGS_MODULE="project.settings"

# Files Needed for Dependency Installation
COPY dev/.pip.conf /etc/pip.conf
COPY dev/dev-requirements.txt /usr/local/requirements.txt

# Dependency Installation
WORKDIR /tmp
RUN apt-get  update \
    && apt-get upgrade -y \
    && apt-get install musl-dev g++ bash curl gnupg -y \
    && curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - \
    && curl https://packages.microsoft.com/config/debian/11/prod.list > /etc/apt/sources.list.d/mssql-release.list \
    && apt-get  update \
    && apt-get install --no-install-recommends libfreetype-dev freetds-dev python-dev git libpng-dev libxml2-dev \
         libxslt-dev libssl-dev libopenblas-dev rsyslog supervisor tini tzdata libghc-zlib-dev libjpeg-dev cron \
         libgssapi-krb5-2 unixodbc-dev -y \
    && ACCEPT_EULA=Y apt-get install -y msodbcsql18 \
    && ln -s /usr/include/locale.h /usr/include/xlocale.h \
    && pip install --no-cache-dir --upgrade pip setuptools wheel \
    && pip install matplotlib --no-cache-dir \
    && pip install --no-cache-dir -r /usr/local/requirements.txt

# Setting Up For Install
COPY conf/ /opt/project/conf/
RUN mkdir -p /var/log/project /conf \
    && cp /opt/project/conf/supervisord.conf /conf/supervisord.conf \
    && cp /opt/project/conf/rsyslog.conf /conf/rsyslog.conf

WORKDIR /opt

# Copy Over Packages
COPY project-db-migrations /opt/project/project-db-migrations
COPY infrastructure /opt/infrastructure
COPY project /opt/project/src
COPY README.md /opt/project/README.md

# Install Infrastructure
RUN cd /opt/infrastructure && python3 setup.py install

# Install Project Service
RUN cd /opt/project/src && python3 setup.py install

RUN ["chmod", "+x", "/opt/project/conf/entrypoint.sh"]

WORKDIR /

EXPOSE 80

ENTRYPOINT ["tini", "--", "/opt/project/conf/entrypoint.sh"]
CMD ["supervisord", "-c", "/conf/supervisord.conf"]

entrypoint.sh

#!/bin/bash
set -eu

echo "Setting Up Project Service"

# Adding Temp Directory
mkdir -p /opt/project/tmp

echo "Service has been setup"

exec $@

supervisord.conf

[supervisord]
nodaemon=true
logfile=/var/log/project/supervisord.log
childlogdir=/var/log/project


[program:rsyslogd]
command=/usr/sbin/rsyslogd -n -f /conf/rsyslog.conf
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0


[program:crond]
command=/usr/sbin/cron -f -l 15
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0


[program:project]
command=python -m project.run --server
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0

映像在不更改用户的情况下运行和部署,因此它应该以 root 身份运行。

问题暂未有回复.您可以查看右边的相关问题.
2 为什么不以分离模式执行Docker入口点脚本?

假设这个简单的Dockerfile: 而entrypoint.sh看起来像这样: 现在,如果我构建映像并在前台创建容器,则执行入口点脚本: 但是,如果我以分离模式创建容器,则不会执行该容器: 这是为什么? 或者,更重要的是,如何创建执行入口点脚本的分离式容器? ...

2018-09-22 21:29:52 1 669   docker
4 在Docker入口点脚本中卷曲

我正在修改此存储库以自动配置转发器。 它具有一个指定入口点的Dockerfile: 在该文件中,我试图卷曲一个AWS实例ID,并将其放在一个文件中,以供Splunk使用。 如果我按照回购协议说明创建了一个splunk网络,那么一切都将正常运行,并且一切顺利。 我不能完全归纳此网络的 ...

5 了解Docker入口点脚本

该脚本位于此处: https : //github.com/docker-library/ghost/blob/master/docker-entrypoint.sh 据我所知,它说,如果您使用npm start某种变体, npm start将某些文件从$GHOST_SOURCE移至$G ...

6 Docker在入口点运行脚本

在Dockerfile中我定义了一个入口点 : 在docker-entrypoint.sh ,我想从template.json创建一个文件( file.json ),这只是用实际值替换一些环境变量。 进入容器后,我看到file.json为空。 但是如果我在容器内的bash提示符 ...

7 python -c 作为 docker 入口点

我试图通过运行一小段 python 代码来测试我的 CI/CD 管道中的 docker 容器。 我希望能起作用的是这样的: 但是我得到错误,即使我用python替换python3 现在我在运行时创建一个脚本并使用 volume 挂载它 有什么方法可以使python3 -c以与我当前解决方 ...

10 泊坞窗:与ENTRYPOINT一起运行python CMD启动脚本

我有一个基于CentOS的容器,运行gunicorn,并提供flask应用程序。 我希望启动脚本在首次启动时运行,尽管我希望我的入口点仍然保持我的电话。 Dockerfile代码段 我无法使它与Shell样式CMD指令一起使用。 日志显示CMD抱怨“错误:'/ usr / bi ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM