首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令没有获得.bashrc变量

命令没有获得.bashrc变量
EN

Stack Overflow用户
提问于 2018-10-23 03:34:53
回答 3查看 2.6K关注 0票数 1

启动容器时,我使用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

主管配置:

代码语言:javascript
复制
[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.log

docker-compose.yml

代码语言:javascript
复制
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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-11-01 17:00:20

~/.bashrc在shell以交互方式打开之前不会运行,这就是当您执行交互式docker exec时没有问题的原因,请参阅bashrc文件的前几行:

代码语言:javascript
复制
# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

你需要对这些行进行评论。

如果您只需要一个Environment变量,最好从容器中获取PYTHON_PATH的值,并将完整的变量添加到docker-compose.yml文件中。

票数 2
EN

Stack Overflow用户

发布于 2018-10-30 13:47:22

代码语言:javascript
复制
command: ["python2", "/usr/bin/supervisord", "--nodaemon", "--configuration", "/etc/supervisor/supervisord.conf"]

您提供的命令是使用exec语法。请参见CMD (同样适用于RUNENTRYPOINT):

如果使用CMD的shell形式,则<command>将在/bin/sh -c中执行: 从ubuntu回波“这是个测试。” 如果您想在没有shell的情况下运行您的<command>,那么必须将命令表示为JSON数组,并为可执行文件提供完整的路径。此数组表单是CMD的首选格式。任何附加参数必须单独表示为数组中的字符串: 来自ubuntu CMD "/usr/bin/wc“、”--帮助“

在您的示例中,您需要一个bash来处理.bashrc文件,这意味着您需要类似于以下内容的内容:

代码语言:javascript
复制
command: ["/bin/bash", "-c", "python2 /usr/bin/supervisord --nodaemon --configuration /etc/supervisor/supervisord.conf"]

编辑:在ubuntu:16.04中使用/root/..bashrc,您将在文件的顶部看到以下内容:

代码语言:javascript
复制
# If not running interactively, don't do anything
[ -z "$PS1" ] && return

可以使用sed命令修改这一行之前的文件:

代码语言:javascript
复制
sed -i '4s;^;export PYTHONPATH=$PYTHONPATH:/models/research:/models/research/slim\n;' /root/.bashrc

我会考虑把它放在一个用来启动容器的脚本中,而不是侵入.bashrc,例如一个start.sh:

代码语言:javascript
复制
#!/bin/sh
export PYTHONPATH=$PYTHONPATH:/models/research:/models/research/slim
exec python2 /usr/bin/supervisord --nodaemon --configuration /etc/supervisor/supervisord.conf

然后将其添加到您的图像中:

代码语言:javascript
复制
COPY start.sh /
RUN chmod 755 /start.sh # if your build server doesn't have this permission set
CMD [ "/start.sh" ]
票数 2
EN

Stack Overflow用户

发布于 2018-10-23 07:27:43

尝试使用命令启动对接者撰写:

代码语言:javascript
复制
PYTHONPATH="$PYTHONPATH:/models/research:/models/research/slim" docker-compose up -d
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52940777

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档