Python docker compose如何从另一个项目访问模块?

Python docker compose如何从另一个项目访问模块?,python,docker,Python,Docker,我有2个项目,我想让项目2访问项目1中的功能,如何做到这一点 这是我的简单文件:) 计划 root ---one ------main.py ---two ------main.py docker-compose.yml services: one: build: ./one two: build: ./two version: '3' services: one: build: ./one two: build: context:

我有2个项目,我想让项目2访问项目1中的功能,如何做到这一点

这是我的简单文件:)

计划

root
---one
------main.py
---two
------main.py
docker-compose.yml

services:
  one:
    build: ./one
  two:
    build: ./two
version: '3'
services:
  one:
    build: ./one
  two:
    build:
      context: .
      dockerfile: Dockerfile-two
两个/main.py

from one.main import myfun

myfun()
来自docker日志的错误

Traceback (most recent call last):
  File "main.py", line 1, in <module>
    from one.main import myfun
ModuleNotFoundError: No module named 'one'
回溯(最近一次呼叫最后一次):
文件“main.py”,第1行,在
从1.main导入myfun
ModuleNotFoundError:没有名为“一”的模块

干杯:)

一个容器不能直接访问或导入另一个容器中的代码,就像两个Python应用程序在物理上不同的机器上运行一样

首先,请通读,尤其是上的指南。您应该将
one
应用程序视为普通的Python库;它应该有一个
setup.py
脚本等等

如果
one
本身可以作为应用程序运行,那么
one/Dockerfile
可以非常简单:

来自python:3.8的

WORKDIR/app
复制/
运行pip安装。
CMD一些控制台脚本
有两种方法可以将此库放入应用程序
two
。一种是在Docker之外运行:

cd../one
python setup.py bdist_wheel
中压区/1-*.whl../2/1.whl
cd../2
docker build-t me/2。
然后,Dockerfile可以手动安装生成的控制盘文件:

来自python:3.8的

WORKDIR/app
复制一个.whl。
运行pip安装。/one.whl
复制requirements.txt/
运行pip安装-r requirements.txt
复制/
CMD[“/two.py”]
也可以使用完全隔离的环境,在一个命令中使用。Dockerfile应该位于图表中的
根目录中;它可以在其他地方,但您需要在
docker build
命令中使用
root
路径,并且所有
COPY
路径都将相对于
root

来自python:3.8的
版本
WORKDIR/one
复印一份/
运行python setup.py bdist_wheel\
&&中压区/1-*.whl 1.whl
来自python:3.8
WORKDIR/app
复制--from=buildone/one/one.whl。
运行pip安装。/one.whl
复制两个/requirements.txt/
#并重复“只需构建两个”Dockerfile的其余部分

经过搜索和帮助,我找到了解决方案

我不得不更改docker compose文件,项目的Dockerfile
two
,并将其移动到主目录

新docker-compose.yml

services:
  one:
    build: ./one
  two:
    build: ./two
version: '3'
services:
  one:
    build: ./one
  two:
    build:
      context: .
      dockerfile: Dockerfile-two
新Dockerfile 2

FROM python:3.6
WORKDIR /two

COPY /two /two/
COPY /one /two/one/

COPY /two/requirements.txt .
RUN pip install -r requirements.txt

CMD ["python", "/two/main.py"]
它必须在主根目录中才能访问所有文件夹。 干杯:)

谢谢你的回答:)对我来说,最好的方法是创建一个公共库,并与python项目+更改Dockerfile+Docker compose文件共享它。我会把它贴在下面的新文件里。干杯