仅在未启动depends_on泊坞窗时启动

时间:2019-07-10 12:47:31

标签: docker-compose

我有一个在docker中运行的服务。对于原因,我想对其并行运行一套测试,例如集成测试和性能测试。

我有一个看起来像这样的docker-compose.yaml:

# My service - the thing under test in this scenario
service: 
  ports: 
    - 4000:4000
  ...

# Integration tests
integration:
  depends_on:
    - service
  ...


# Performance tests
performance:
  depends_on:
    - service
  ...

我想继续公开4000,以便docker world之外的组件可以与其交互。但是,当我并行运行这些测试时,其中一个测试出现此错误

  

无法启动服务服务... 0.0.0.0:4000失败:端口已在使用中。

这是因为docker-compose试图为每个测试启动服务。是否可以告诉docker-compose使用相同的服务实例?有没有更好的方法来达到相同的结果?

1 个答案:

答案 0 :(得分:0)

我已经为自己解决了这个问题,我将在这里为以后遇到类似问题的任何人记录下来。

默认情况下,从服务发布端口是这里的问题。根据服务启动方式的上下文,端口是否可以发布。最好使用docker子网在docker容器之间进行通信。

docker-compose.yaml现在看起来像这样:

service:
  # no ports declaration
  ...

integration:
  depends_on:
    - service
  environment:
    - SERVICE_URL=http://service:4000
  ...

performance:
  depends_on:
    - service
  environment:
    - SERVICE_URL=http://service:4000
  ...

在需要时通过任何启动服务的方式发布端口:

docker-compose run -p 4000:4000 service