启动容器时,我使用docker执行命令,但是环境变量似乎没有从.bashrc文件中获得,请给我一些建议。谢谢
dockerFile我把它添加到.bashrc:echo "export PYTHONPATH=$PYTHONPATH:/models/research:/models/research/slim" >> /root/.bashrc中
docker-compose.yml文件:
command: ["python2", "/usr/bin/supervisord", "--nodaemon", "--configuration", "/etc/supervisor/supervisord.conf"]
PS:如果我从容器中回显$PYTHPATH或仅仅执行python2 /usr/bin/supervisord -c /etc/supervisor/Superor.conf,那么就没有问题了。
系统为Ubuntu 16.04
主管配置:
[program:mosquitto-subscrible]
process_name=%(program_name)s_%(process_num)02d
command=python3 detection.py start_mosquitto_subscrible
autostart=true
autorestart=true
user=root
numprocs=1
directory=/var/www/html/detection
redirect_stderr=true
stdout_logfile=/var/www/html/detection/logs/detection.logdocker-compose.yml
version: '3'
services:
tensorflow:
container_name: object-detection
build:
context: ./tensorflow
dockerfile: Dockerfile
# environment:
# - PYTHONPATH=:/models/research:/models/research/slim
volumes:
- ./www:/var/www/html:cached
- ./tensorflow/supervisor:/etc/supervisor/conf.d
command: ['tail', '-f', '/dev/null']
# command: ["python2", "-c", "/usr/bin/supervisord", "--nodaemon","--configuration", "/etc/supervisor/supervisord.conf"]总之,我在Dockfile echo "export PYTHONPATH=$PYTHONPATH:/models/research:/models/research/slim" >> /root/.bashrc中编写了一个命令来进行/models/research,可以通过PYTHON找到。
有一个python模型/models/research/object_detection。
对于我的主管,如果我只是从docker -复合命令启动object_detection,而不是在docker容器中执行supervisord,那么命令supervisord就找不到supervisord模型。
监督需要python2启动,我的代码需要python3
发布于 2018-11-01 17:00:20
~/.bashrc在shell以交互方式打开之前不会运行,这就是当您执行交互式docker exec时没有问题的原因,请参阅bashrc文件的前几行:
# If not running interactively, don't do anything
case $- in
*i*) ;;
*) return;;
esac你需要对这些行进行评论。
如果您只需要一个Environment变量,最好从容器中获取PYTHON_PATH的值,并将完整的变量添加到docker-compose.yml文件中。
发布于 2018-10-30 13:47:22
command: ["python2", "/usr/bin/supervisord", "--nodaemon", "--configuration", "/etc/supervisor/supervisord.conf"]您提供的命令是使用exec语法。请参见CMD (同样适用于RUN和ENTRYPOINT):
如果使用
CMD的shell形式,则<command>将在/bin/sh -c中执行: 从ubuntu回波“这是个测试。” 如果您想在没有shell的情况下运行您的<command>,那么必须将命令表示为JSON数组,并为可执行文件提供完整的路径。此数组表单是CMD的首选格式。任何附加参数必须单独表示为数组中的字符串: 来自ubuntu CMD "/usr/bin/wc“、”--帮助“
在您的示例中,您需要一个bash来处理.bashrc文件,这意味着您需要类似于以下内容的内容:
command: ["/bin/bash", "-c", "python2 /usr/bin/supervisord --nodaemon --configuration /etc/supervisor/supervisord.conf"]编辑:在ubuntu:16.04中使用/root/..bashrc,您将在文件的顶部看到以下内容:
# If not running interactively, don't do anything
[ -z "$PS1" ] && return可以使用sed命令修改这一行之前的文件:
sed -i '4s;^;export PYTHONPATH=$PYTHONPATH:/models/research:/models/research/slim\n;' /root/.bashrc我会考虑把它放在一个用来启动容器的脚本中,而不是侵入.bashrc,例如一个start.sh:
#!/bin/sh
export PYTHONPATH=$PYTHONPATH:/models/research:/models/research/slim
exec python2 /usr/bin/supervisord --nodaemon --configuration /etc/supervisor/supervisord.conf然后将其添加到您的图像中:
COPY start.sh /
RUN chmod 755 /start.sh # if your build server doesn't have this permission set
CMD [ "/start.sh" ]发布于 2018-10-23 07:27:43
尝试使用命令启动对接者撰写:
PYTHONPATH="$PYTHONPATH:/models/research:/models/research/slim" docker-compose up -dhttps://stackoverflow.com/questions/52940777
复制相似问题