在docker compose中构建图像时多个DockerFile失败

在docker compose中构建图像时多个DockerFile失败,docker,docker-compose,dockerfile,Docker,Docker Compose,Dockerfile,我想创建一个docker compose,以消除运行测试所需的命令数量。我的目标是运行一个命令,它将启动我的容器并运行我的测试。这是我第一次创建docker compose文件,请耐心等待。docker-compose.file位于其他两个dockerfile的旁边。下面是我发起的docker compose,但我甚至无法构建图像。我已尝试指定添加“卷:-.:”的路径,但仍然不起作用 services: headless-chrome: build: ./Docker

我想创建一个docker compose,以消除运行测试所需的命令数量。我的目标是运行一个命令,它将启动我的容器并运行我的测试。这是我第一次创建docker compose文件,请耐心等待。docker-compose.file位于其他两个dockerfile的旁边。下面是我发起的docker compose,但我甚至无法构建图像。我已尝试指定添加“卷:-.:”的路径,但仍然不起作用

services:
      headless-chrome:
        build: ./Dockerfile-headless-chrome
      dev-server:
        build: ./Dockerfile

运行时,我需要在新的shell(shell 2)中运行以下命令:

然后,当Im在容器中运行时:

$ npm run selenium-docker
$ npm run uat

TypeError:您必须在路径中指定要生成的目录

build:./Dockerfile headless chrome
添加到docker-compose.yml时,您设置的是上下文文件夹,而不是Dockerfile文件。您需要的属性是build->dockerfile:

对于
开发服务器
我没有设置任何内容,因为它将使用默认值(
上下文:.
dockerfile:dockerfile
)。实际上,在无头chrome上也不需要
上下文:.
,因为它是默认的

已编辑-第2部分

指挥部也有问题。要使其自动化,您必须更改
/bin/bash

为所有测试创建一个文件(entrypoint.sh):

将此文件添加到图像(
Add
)并在启动容器(
CMD
)时运行它


它已经准备好了。再次编译
docker compose Build
(因为您编辑了Dockerfile)并运行
docker compose up

谢谢!我尝试了上述解决方案。但我收到另一个问题:警告:无头chrome服务的图像是因为它还不存在而建立的。要重建此映像,必须使用
docker compose build
docker compose up--build
。正在重新创建yetiui_dev-server_1。。。正在重新创建yetiui_dev-server_1正在创建yetiui_headless-chrome_1。。。正在重新创建yetiui_dev-server_1。。。附加到yetiui_headless-chrome_1、yetiui_dev-server_1 headless-chrome_1 |/bin/bash的操作已完成:-c:选项需要一个参数yetiui_headless-chrome_1以代码2退出yetiui_dev-server_1以代码0退出您需要为
/bin/bash
指定一个命令。如果您不想运行任何命令,那么您可以完全不运行它,只运行
docker run-it--rm--net=host--cap add=SYS\u ADMIN headless chrome
@Rafael,谢谢!测试现在确实在运行,存在的一个小问题是它似乎没有等到dev服务器开始运行。我试图添加dependens\u on:dev服务器,但感觉没有效果。似乎在我的selenium启动之前,dev服务器以代码0退出。很好,它工作正常:)。现在由你决定。您需要使您的应用程序能够适应这些故障。我喜欢使用等待脚本,但还有其他选择。查看更多信息。好的!我来看看!我已经查看了控制启动顺序,但是这些尝试尝试尝试执行while循环,直到dev服务器启动。我的问题略有不同,我的开发服务器已启动,然后立即退出,因此即使我的工作服务器尝试连接到它,它也会失败,因为开发人员已退出。不要将Dockerfile的名称(例如Dockerfile headless chrome)放在其路径上。只需
build./
$ SCHEME=http ENV=stage DOCKER_DEV_ENTRYPOINT='"npm run dev-server"' make docker-dev
$ docker build -t headless-chrome -f Dockerfile-headless-chrome .
$ docker run -it --rm --net=host --cap-add=SYS_ADMIN headless-chrome /bin/bash
$ npm run selenium-docker
$ npm run uat
  services:
    headless-chrome:
      build:
        context: .
        dockerfile: Dockerfile-alternate
    dev-server:
      build: .
npm run selenium-docker
npm run uat
# Dockerfile

... your commands

ADD entrypoint.sh
CMD bash entrypoint.sh