这是我的docker文件的样子
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情况下,我只是使用
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,但无法获得示例示例。
非常感谢您的帮助。
答案 0 :(得分:2)
您只需要使用其他项目名称即可。默认情况下,compose使用项目所在的目录名称作为项目名称。 docker-compose负责为每个项目适当地设置隔离网络。
要创建项目的两个实例,命名为“ dev”和“ test”,可以按以下方式运行它:
docker-compose -p dev up
docker-compose -p test up
来自https://docs.docker.com/compose/reference/overview/
-p, --project-name NAME Specify an alternate project name
(default: directory name)
您需要删除container_name
字段才能使多个项目实例正常工作。 Compose会自动在项目名称前添加容器名称,但是如果指定了container_name
,它将不会执行。如果使用container_name
,则从撰写文件启动另一个项目时,将出现容器名称冲突。删除container_name
后,您的服务将获得服务名称作为主机名。