首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Docker-在单个主机上组合多个实例

Docker-在单个主机上组合多个实例
EN

Stack Overflow用户
提问于 2020-06-18 03:05:28
回答 1查看 390关注 0票数 3

这是我的docker文件的样子

代码语言:javascript
复制
version: "3"
services:
  controller:
    build: ./cd_controller
    image: cd_controller:latest
    env_file: $PWD/robot-configurations/.env
    cap_add:
      - ALL
    links:
      - test_fixture
    volumes:
      - dependencypackages:/root/dependency-packages
      - robotconfigurations:/root/robot-configurations
    container_name: controller_g5
  test_fixture:
    image: docker-standard-all.ur-update.dk/ur/pytest-ur:0.7.1
    volumes:
      - pytestfixture:/workspace
      - controllertests:/workspace/controller-tests
    entrypoint: /workspace/entrypoint.sh
    container_name: test_fixture
    stdin_open: true # docker run -i
    tty: true        # docker run -t
volumes:
  robotconfigurations:
    driver_opts:
      type: none
      device: $PWD/robot-configurations
      o: bind
  ...

基本上它有两个两个服务/容器controller&test_fixture。控制器运行源代码,而test_fixture包含所有的test_cases。test_fixture需要通过套接字与控制器通信。由于docker-compose在其容器之间创建了一个网络,因此在我的py-test用例中,我只是简单地使用

代码语言:javascript
复制
import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("controller_g5", 30001)) # controller_g5 is name of the controller container 

到目前为止,一切看起来都很好。但我意识到我有多个版本/特性的源代码。所以我想创建一个相同事物的多个实例,每个实例都有自己的网络。命名容器是否会阻止在不同网络中创建同名容器?此外,我也不确定如何在同一主机上使用类似的容器再启动一个网络。我偶然发现了Multiple isolated environments on a single host,但无法获得示例示例。

任何帮助都是非常感谢的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-18 03:10:44

您只需要使用不同的项目名称。默认情况下,compose使用项目所在的目录名称作为项目名称。docker-compose负责为每个项目适当地设置隔离网络。

要创建项目命名空间为"dev“和"test”的两个实例,可以按如下方式运行:

代码语言:javascript
复制
docker-compose -p dev up

docker-compose -p test up 

来自https://docs.docker.com/compose/reference/overview/

代码语言:javascript
复制
-p, --project-name NAME     Specify an alternate project name
                              (default: directory name)

您需要移除container_name字段才能让多个项目实例正常工作。Compose会自动在容器名称前面加上项目名称,但是如果指定了container_name,它就不会这样做。如果使用container_name,当从组合文件启动另一个项目时,您会得到容器名称冲突。删除container_name后,您的服务将获得主机名形式的服务名称。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62436534

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档