python - Docker - Ubuntu 中的主管抛出 ENOEXEC 错误

标签 python mongodb docker supervisord

我有一个正在运行的 Ubuntu Docker 容器,其中安装了 python3.7、mongodb 和 supervisor。当我尝试通过主管服务运行我的 python 脚本时,它会抛出以下错误:

supervisor: couldn't exec /data/code/venvs/cleverInvest/bin/python: ENOEXEC
supervisor: child process was not spawned

supervisor.conf

[supervisord]
;logfile=/var/app/logs/ ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=5           ; (num of main logfile rotation backups;default 10)
loglevel=debug                ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=true                ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)

[program:mongod]
;command=/usr/bin/mongod --config /etc/mongod.conf
command=/usr/bin/mongod
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
autorestart=true
user=mongodb
priority=100

[program:server]
priority=10
;directory=/data/code/
;command=python3 server.py
command=/data/code/venvs/cleverInvest/bin/python /data/code/server.py
user=root
autostart=true
autorestart=true

[program:cleverinvest]
priority=10
;directory=/data/code/
command=/data/code/venvs/cleverInvest/bin/python /data/code/main.py
;command=python3 main.py
user=root
autostart=true
autorestart=true

我已经尝试将 !#/bin/sh 添加到 python 文件,或者给他们一个 777 规则。似乎没有任何帮助。

这是我的 Dockerfile

FROM       ubuntu:latest
MAINTAINER Docker

# Update apt-get sources AND install MongoDB
RUN apt-get update && apt-get upgrade -y
RUN apt-get install -y software-properties-common
RUN apt install -y gnupg2
RUN gpg2 --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys F3B1AA8B

# Installation:
RUN add-apt-repository ppa:deadsnakes/ppa

RUN apt-get install -y python3.7
RUN apt-get install -y python3-pip
#Mongodb
RUN apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 0C49F3730359A14518585931BC711F9BA15703C6
RUN apt-add-repository 'deb [ arch=amd64,arm64 ] http://repo.mongodb.org/apt/ubuntu xenial/mongodb-org/3.4 multiverse'

RUN apt-get update

RUN apt-get install -y mongodb-org

# Supervisor for starting multiple process in Docker
RUN apt-get -y install supervisor && \
  mkdir -p /var/log/supervisor && \
  mkdir -p /etc/supervisor/conf.d

ADD supervisor.conf /etc/supervisor.conf

# Create the MongoDB data directory
RUN mkdir -p /data/db

RUN chmod 777 /data/db

# Create the MongoDB data directory
RUN mkdir -p /data/code
RUN chmod 777 /data/code

RUN mongod --version

#RUN mongod --dbpath /data/db --fork --logpath /data/db/log

# COPY cleverInvest Code to Container
COPY dev /data/code

# Installing pip for python modules
RUN apt-get install -y python3-pip

# Install modules
WORKDIR /data/code/
RUN chmod +x -R *.py
RUN chmod 777 -R *
RUN pip3 install -r requirements.txt

RUN pip3 freeze

EXPOSE 80 27017

# Set /usr/bin/mongod as the dockerized entry-point application
CMD ["supervisord", "-c", "/etc/supervisor.conf"]

#ENTRYPOINT ["/bin/bash"]

最佳答案

所以我自己弄明白了,我想写下我的解决方案,以防其他人遇到同样的问题。

我只是通过使用全局安装的 python 版本而不是通过 th virtualenv 更改了我启动 python 脚本的方法。 所以我的 supervisor.conf 文件现在看起来像这样:

[supervisord]
;logfile=/var/app/logs/ ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=5           ; (num of main logfile rotation backups;default 10)
loglevel=debug                ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=true                ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)

[program:mongod]
;command=/usr/bin/mongod --config /etc/mongod.conf
command=/usr/bin/mongod
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
autorestart=true
user=mongodb
priority=100

[program:server]
priority=10
directory=/data/code/
command=python3 server.py
;command=/data/code/venvs/cleverInvest/bin/python /data/code/server.py
user=root
autostart=true
autorestart=true

[program:cleverinvest]
priority=10
directory=/data/code/
command=python3 main.py
;command=/data/code/venvs/cleverInvest/bin/python /data/code/main.py
user=root
autostart=true
autorestart=true

我的脚本文件中也有语法错误。纠正它们后,它起作用了。

关于python - Docker - Ubuntu 中的主管抛出 ENOEXEC 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56463917/

相关文章:

nginx - 如何仅在 docker 网络中公开端口?

javascript - MongoDB插入多个文档,其中可能有重复的_id

mongodb - 使用 MongoDB/PyMongo 进行多个同时更新?

docker - 自动启动多个现有依赖容器的最佳方法是什么?

python - lstm 时间序列的多步序列的数据转换

python - Python 日志记录的摘要计数

python - pip无法卸载这个包

python - statsmodels patsy 假设测试约束中的分类变量 'C()'

mongodb - 在 Meteor MongoObservable 中获取插入的文档 ID

python - 在Docker容器/镜像中未创建venv目录