将/usr/local/bin挂载到python:3 Docker镜像

0 投票
1 回答
49 浏览
提问于 2025-04-12 18:58

我想把 /usr/local/bin/ 这个文件夹从 docker 的 python:3 镜像挂载到我的主机上。这样做的原因是我希望我的 PyCharm 社区版能够使用 docker 中的解释器来进行开发。

这是我的 docker-compose 文件:

version: '3.8'
services:
  db:
    image: mysql:8.0
    cap_add:
      - SYS_NICE
    restart: always
    environment:
      - MYSQL_DATABASE=mydb
      - MYSQL_ROOT_PASSWORD=root
    ports:
      - '3306:3306'
    volumes:
      - db:/var/lib/mysql
      - ./db/init.sql:/docker-entrypoint-initdb.d/init.sql
  web:
    build: .
    command: python app/manage.py runserver 0.0.0.0:8000
    volumes:
      - .:/code/app
      - ./python-env:/usr/local/bin/
    ports:
      - "8000:8000"
    environment:
      - DB_NAME=mydb
      - DB_USER=root
      - DB_PASSWORD=root
    depends_on:
      - db

volumes:
  db:
    driver: local

问题出在这一行:

- ./python-env:/usr/local/bin/

错误信息是:

来自守护进程的错误响应:为容器创建任务失败:创建 shim 任务失败:OCI 运行时创建失败:runc 创建失败:无法启动容器进程:执行: "python":在 $PATH 中找不到可执行文件:未知

我尝试在我的 docker 构建文件中设置一个符号链接,指向 /usr/local/bin 并挂载那个目录,但没有成功。有没有人对这个问题有什么想法?

1 个回答

0

bin文件夹里放着操作系统需要的重要可执行文件。当你把自己创建的python-env挂载到docker的user/local/bin时,它找不到挂载文件夹(python-env)里的任何必要文件,就会报错。

如果你想在主机和容器之间共享一个Python环境,你可以:

  1. 在主机上创建一个Python虚拟环境,然后把这个环境挂载到容器的其他目录里。
  2. 更新容器的PATH环境变量,把挂载的虚拟环境中的可执行文件路径加进去。
# Prepend "/my/custom/path" to the PATH which contains python executable
ENV PATH=/my/custom/path:$PATH

# Rest of your Docker Configs

撰写回答