在 Dockerfile 中设置别名不起作用:找不到命令

Setting alias in Dockerfile not working: command not found(在 Dockerfile 中设置别名不起作用:找不到命令)
本文介绍了在 Dockerfile 中设置别名不起作用:找不到命令的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

限时送ChatGPT账号..

我的 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 中设置别名不起作用:找不到命令的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

本站部分内容来源互联网,如果有图片或者内容侵犯了您的权益,请联系我们,我们会在确认后第一时间进行删除!

相关文档推荐

How do I make a list of all members in a discord server using discord.py?(如何使用 discord.py 列出不和谐服务器中的所有成员?)
how to change discord.py bot activity(如何更改 discord.py 机器人活动)
Issues with getting VoiceChannel.members and Guild.members to return a full list(让 VoiceChannel.members 和 Guild.members 返回完整列表的问题)
Add button components to a message (discord.py)(将按钮组件添加到消息(discord.py))
on_message() and @bot.command issue(on_message() 和@bot.command 问题)
How to edit a message in discord.py(如何在 discord.py 中编辑消息)