Setting alias in Dockerfile not working: command not found(在 Dockerfile 中设置别名不起作用:找不到命令)
问题描述
我的 Dockerfile 中有以下内容:
I have the following in my Dockerfile:
...
USER $user
# Set default python version to 3
RUN alias python=python3
RUN alias pip=pip3
WORKDIR /app
# Install local dependencies
RUN pip install --requirement requirements.txt --user
构建图像时,我得到以下信息:
When building the image, I get the following:
Step 13/22 : RUN alias pip=pip3
---> Running in dc48c9c84c88
Removing intermediate container dc48c9c84c88
---> 6c7757ea2724
Step 14/22 : RUN pip install --requirement requirements.txt --user
---> Running in b829d6875998
/bin/sh: pip: command not found
如果我在它上面设置了别名,为什么 pip 无法识别?
Why is pip not recognized if I set an alias right on top of it?
Ps:我不想使用 .bashrc 来加载别名.
Ps: I do not want to use .bashrc for loading aliases.
推荐答案
问题是别名只存在于镜像中的那个中间层.请尝试以下操作:
The problem is that the alias only exists for that intermediate layer in the image. Try the following:
FROM ubuntu
RUN apt-get update && apt-get install python3-pip -y
RUN alias python=python3
在这里测试:
❰mm92400❙~/sample❱✔≻ docker build . -t testimage
...
Successfully tagged testimage:latest
❰mm92400❙~/sample❱✔≻ docker run -it testimage bash
root@78e4f3400ef4:/# python
bash: python: command not found
root@78e4f3400ef4:/#
这是因为每层都启动了一个新的 bash 会话,所以别名会在后面的层中丢失.
This is because a new bash session is started for each layer, so the alias will be lost in the following layers.
为了保持稳定的别名,您可以像 python 在其 官方图片:
To keep a stable alias, you can use a symlink as python does in their official image:
FROM ubuntu
RUN apt-get update && apt-get install python3-pip -y
# as a quick note, for a proper install of python, you would
# use a python base image or follow a more official install of python,
# changing this to RUN cd /usr/local/bin
# this just replicates your issue quickly
RUN cd "$(dirname $(which python3))"
&& ln -s idle3 idle
&& ln -s pydoc3 pydoc
&& ln -s python3 python # this will properly alias your python
&& ln -s python3-config python-config
RUN python -m pip install -r requirements.txt
注意使用 python3-pip 包来捆绑 pip.调用 pip 时,最好使用 python -m pip 语法,因为它可以确保您调用的 pip 是与您的 python 安装相关的一个:
Note the use of the python3-pip package to bundle pip. When calling pip, it's best to use the python -m pip syntax, as it ensures that the pip you are calling is the one tied to your installation of python:
python -m pip install -r requirements.txt
这篇关于在 Dockerfile 中设置别名不起作用:找不到命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:在 Dockerfile 中设置别名不起作用:找不到命令
基础教程推荐
- 将 x 轴刻度更改为自定义字符串 2022-01-01
- Discord.py 缺少必需的参数 2022-01-01
- 尝试制作WhatsApp机器人 2022-01-01
- 使用生成器和迭代器时 Python 多循环失败 2022-01-01
- 与常规 dict 相比,Python manager.dict() 非常慢 2022-01-01
- 在 Celery 工作人员中捕获 Heroku SIGTERM 以优雅地关 2022-01-01
- 用 Python 编写 Fortran 无格式文件 2022-01-01
- pyserial - 可以从线程 a 写入串行端口,是否阻塞从线程 b 读取? 2022-01-01
- numpy float:比算术运算中内置的慢 10 倍? 2022-01-01
- 由Python将MP3转换为MIDI(类型错误:无法加载插件:mtg-Melodia:Melodia) 2022-01-01
