
原始情况下,每次都需要 “进入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.shdocker 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。