原始情况下,每次都需要 “进入docker => 进入目录 => 激活conda” 这几个步骤,非常繁琐。如何通过执行shell脚本,一键完成上述步骤?
脚本内容,enter_docker.sh:
#!/bin/bash
# 定义容器名称(视情况修改)
CONTAINER_NAME="cu12_docker"
# 定义目录路径(视情况修改)
DIRECTORY_PATH="/mnt/disk/proj"
# 定义conda初始化脚本路径(视情况修改)
CONDA_INIT="/root/miniconda3/etc/profile.d/conda.sh"
# 定义conda环境名称(视情况修改)
CONDA_ENV_NAME="py39"
# 进入docker容器并执行命令(通常无需修改)
docker exec -it $CONTAINER_NAME /bin/bash -c "
source $CONDA_INIT &&
cd $DIRECTORY_PATH &&
conda activate $CONDA_ENV_NAME &&
export PS1='(${CONDA_ENV_NAME}) \u@\h:\w\$ ' &&
exec /bin/bash --norc
"
给可执行权限:
chmod +x enter_docker.sh
以后每次只需要以下命令,即可完成上述步骤:
./enter_docer.sh
docker exec -it $CONTAINER_NAME /bin/bash -c "..."
$CONTAINER_NAME
中启动一个交互式 bash
终端。-i
:保持标准输入打开,支持交互。-t
:分配一个伪终端,确保终端可用。/bin/bash -c
:运行指定的命令字符串。source $CONDA_INIT
conda
命令可用。conda.sh
,这通常位于 Conda 安装目录下的 etc/profile.d/conda.sh
中。cd $DIRECTORY_PATH
$DIRECTORY_PATH
。conda activate $CONDA_ENV_NAME
$CONDA_ENV_NAME
。PATH
环境变量,使 Python 和其他工具使用该环境下的版本。conda activate
需要一个已初始化的 shell 环境(即必须先执行 source
加载 Conda 配置)。export PS1='({CONDA_ENV_NAME}) \u@\h:\w\ '
(${CONDA_ENV_NAME})
:显示当前环境名(如 dglv2
)。\u
:当前用户。\h
:主机名。\w
:当前工作目录。exec /bin/bash --norc
bash
shell,并用它替换当前 shell。exec
:用新的 bash
进程替换当前 shell,而不是开启子 shell。这避免了环境变量和其他设置被覆盖的问题。--norc
:告诉新的 bash
不加载 .bashrc
或其他初始化文件,防止 Conda 初始化脚本再次被加载,从而覆盖现有的激活状态。conda
命令可用。exec /bin/bash
替换当前 shell,确保激活状态继承,而不是创建新的子 shell 导致设置丢失。--norc
避免重复加载 .bashrc
。运行命令后,查看提示符是否正确显示 (dglv2)
。
运行以下命令检查是否在目标环境中:
conda info
确认 active environment
是否为 dglv2
。