bash - Docker 容器启动命令未获取 .bashrc 变量

标签 bash docker docker-compose

我在启动容器时使用 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:如果我 exec echo $PYTHPATH 或只是 exec python2/usr/bin/supervisord -c/etc/supervisor/supervisor.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.log

docker-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 .

和我的主管一起,命令 python3 detection.py start_mosquitto_subscrible如果我开始,则找不到 object_detection 模型 supervisord只是从 docker-compose 命令而不是在 docker 容器中执行它。

supervisord 需要 python2 启动,我的代码需要 python3

最佳答案

~/.bashrc 不会运行,直到 shell 以交互方式打开,这就是为什么当你这样做时没有问题 docker exec这是交互式的,请参阅 bashrc 文件的前几行:

# If not running interactively, don't do anything
case $- in
    *i*) ;;
      *) return;;
esac

你需要注释这些行。

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

关于bash - Docker 容器启动命令未获取 .bashrc 变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52940777/

相关文章:

c - 如何在 bash 脚本中运行一个 c 程序并给它 2 个参数?

linux - 使用具有不同操作系统基础框的 docker 容器是否会对性能产生影响?

postgresql - 为什么 postgres 容器在 Gitlab CI 中忽略/docker-entrypoint-initdb.d/*

java - dockerBuild 失败导致不支持的类文件主要版本 61 错误

docker-compose 构建 nginx : network error (check Internet connection and firewall)

Apache 无法确定 docker 容器上的服务器名

bash - 从大型文本文件中提取大型行列表

linux - 多个awk在同一行打印

regex - 能够根据模式拆分文件但无法从最后一行删除换行符

Docker-compose:卷名太短,名称应至少为两个字母数字字符