Python 如何在compose文件中正确定义服务

Python 如何在compose文件中正确定义服务,python,docker,docker-compose,Python,Docker,Docker Compose,我必须在Docker Compose上运行简单服务。第一个映像将承载先前创建的服务,而依赖于第一个映像的第二个映像将运行测试。所以我创建了Dockerfile: FROM python:2.7-slim WORKDIR /flask COPY requirements.txt requirements.txt RUN pip install -r requirements.txt COPY . . CMD ["python", "routes.py"] 一切正常。我创建了一些简单的测试,它们也

我必须在Docker Compose上运行简单服务。第一个映像将承载先前创建的服务,而依赖于第一个映像的第二个映像将运行测试。所以我创建了
Dockerfile

FROM python:2.7-slim
WORKDIR /flask
COPY requirements.txt requirements.txt
RUN pip install -r requirements.txt
COPY . .
CMD ["python", "routes.py"]
一切正常。我创建了一些简单的测试,它们也可以工作,并将该文件放在与
routes.py
相同的目录中。 因此,我尝试创建
docker compose.yml
文件,并做了如下操作:

version: '2'
services:
    app:
        build: .
        command: 'python MyTest.py'
        ports:
            - "5000:5000"
    tests:
        build:
            context: Mytest.py
        depends_on:
            - app
运行时,我收到一个错误:

TypeError: You must specify a directory to build in path
[13341] Failed to execute script docker-compose

那么,我应该如何指定这些目录以及可以将其放置在
app
tests
服务中的位置?

在使用
version-2
docker compose时,您需要指定
dockerfile
字段


签出。

在使用
version-2
docker compose时,需要指定
dockerfile
字段


签出。

修改生成命令:

...
  build:
    context: .
    dockerfile: Dockerfile
...

修改生成命令:

...
  build:
    context: .
    dockerfile: Dockerfile
...
TypeError:必须指定要在路径中生成的目录 [13341]无法执行脚本docker compose

上面的错误告诉您
上下文:
应该是放置Dockerfile的文件夹,但是您似乎可以使用相同的图像来测试您的产品,我认为不需要指定它

我猜您的
MyTest.py
将访问应用程序容器的
5000
端口进行测试。因此,您需要的是下一步:

version: '2'
services:
  app:
    build: .
    container_name: my_app
    ports:
      - "5000:5000"
  tests:
    build: .
    depends_on:
      - app
    command: python MyTest.py
在这里,您需要注意的是:您应该访问
http://my_app:5000
用于在
MyTest.py
中进行测试

<> P>同时,在<代码> MyTest.Py 建议您<代码>睡眠>代码>某段时间,因为<代码>依赖> < /代码>可以确保<代码>测试在App之后开始,但不能保证此时您的烧瓶已经准备好了,您也可以考虑确保订单。

TypeError:必须指定要在路径中生成的目录 [13341]无法执行脚本docker compose

上面的错误告诉您
上下文:
应该是放置Dockerfile的文件夹,但是您似乎可以使用相同的图像来测试您的产品,我认为不需要指定它

我猜您的
MyTest.py
将访问应用程序容器的
5000
端口进行测试。因此,您需要的是下一步:

version: '2'
services:
  app:
    build: .
    container_name: my_app
    ports:
      - "5000:5000"
  tests:
    build: .
    depends_on:
      - app
    command: python MyTest.py
在这里,您需要注意的是:您应该访问
http://my_app:5000
用于在
MyTest.py
中进行测试


<> P>同时,在<代码> MyTest.Py 建议您<>代码>睡眠>代码>一段时间,因为<代码> RealsSon 只是可以确保<代码>测试在App之后开始,但不能保证此时您的烧瓶已经准备好了,您也可以考虑确保订单。但我收到一个错误
无法启动服务应用程序:b'驱动程序未能在端点挑战上编程外部连接(…):绑定0.0.0:5000失败:端口已分配'可能是由于在
MyTest.py
中有一段时间未睡眠造成的
您的主机似乎已经使用了
5000
端口,请在主机上使用
sudo netstat-oanltp | grep 5000
进行确认,所有这些都只需更改为
6000:5000
进行快速检查。刚刚解决。我有一个容器,它使用
5000
端口,并且刚刚停止它。感谢您的帮助。您的解决方案当然有效,但我遇到一个错误,
无法启动服务应用程序:b'驱动程序未能在端点挑战上编程外部连接(…):绑定0.0.0:5000失败:端口已分配'可能是由于在
MyTest.py
中有一段时间未睡眠造成的
您的主机似乎已经使用了
5000
端口,请在主机上使用
sudo netstat-oanltp | grep 5000
进行确认,所有这些都只需更改为
6000:5000
进行快速检查。刚刚解决。我有一个容器,它使用
5000
端口,并且刚刚停止它。谢谢你的帮助。