Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/docker/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在现有docker swarm Python docker SDK中创建新服务时,如何在client.services.create中添加约束?_Python_Docker_Docker Swarm_Python Docker - Fatal编程技术网

在现有docker swarm Python docker SDK中创建新服务时,如何在client.services.create中添加约束?

在现有docker swarm Python docker SDK中创建新服务时,如何在client.services.create中添加约束?,python,docker,docker-swarm,python-docker,Python,Docker,Docker Swarm,Python Docker,我想使用python docker sdk在现有swarm网络中创建一个服务。我有一个名为test\u net的swarm网络 库的安装:pip3安装docker 下面是用于创建服务的代码 import docker from docker.types import RestartPolicy, Placement def python_sdk(): client = docker.DockerClient(base_url='unix://var/run/docker.sock')

我想使用python docker sdk在现有swarm网络中创建一个服务。我有一个名为
test\u net
的swarm网络

库的安装:
pip3安装docker

下面是用于创建服务的代码

import docker
from docker.types import RestartPolicy, Placement

def python_sdk():
    client = docker.DockerClient(base_url='unix://var/run/docker.sock')
    service_created = client.services.create(
        image='python:3.7-alpine',
        command='python /home/ubuntu/python.py',
        constraints=Placement(constraints=['worker']),
        mounts='/home/ubuntu/deployment/python.py:/home/ubuntu/python.py:rw',
        networks=['test_net'],
        restart_policy=RestartPolicy(condition='none'),
        name='python_sdk'
    )
    print("Created service : ", service_created)
下面是我通过执行上述代码得到的错误:

Traceback (most recent call last):
  File "/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/docker/api/client.py", line 268, in _raise_for_status
    response.raise_for_status()
  File "/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/requests/models.py", line 943, in raise_for_status
    raise HTTPError(http_error_msg, response=self)
requests.exceptions.HTTPError: 400 Client Error: Bad Request for url: http+docker://localhost/v1.41/services/create

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "client.py", line 20, in <module>
    python_sdk()
  File "client.py", line 16, in python_sdk
    name='python_sdk'
  File "/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/docker/models/services.py", line 227, in create
    service_id = self.client.api.create_service(**create_kwargs)
  File "/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/docker/utils/decorators.py", line 34, in wrapper
    return f(self, *args, **kwargs)
  File "/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/docker/api/service.py", line 190, in create_service
    self._post_json(url, data=data, headers=headers), True
  File "/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/docker/api/client.py", line 274, in _result
    self._raise_for_status(response)
  File "/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/docker/api/client.py", line 270, in _raise_for_status
    raise create_api_error_from_http_exception(e)
  File "/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/docker/errors.py", line 31, in create_api_error_from_http_exception
    raise cls(e, response=response, explanation=explanation)
docker.errors.APIError: 400 Client Error for http+docker://localhost/v1.41/services/create: Bad Request ("json: cannot unmarshal object into Go struct field Placement.TaskTemplate.Placement.Constraints of type []string")

回溯(最近一次呼叫最后一次):
文件“/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/docker/api/client.py”,第268行,处于“上升”状态
响应。针对_状态()提出_
文件“/home/ubuntu/deployment/dags/venv/lib/python3.6/site packages/requests/models.py”,第943行,处于raise_for_状态
引发HTTPError(http\u error\u msg,response=self)
requests.exceptions.HTTPError:400客户端错误:对url:http的错误请求+docker://localhost/v1.41/services/create
在处理上述异常期间,发生了另一个异常:
回溯(最近一次呼叫最后一次):
文件“client.py”,第20行,在
python_sdk()
python_sdk中的第16行文件“client.py”
name='python_-sdk'
文件“/home/ubuntu/deployment/dags/venv/lib/python3.6/site packages/docker/models/services.py”,第227行,在create中
服务\u id=self.client.api.create\u服务(**create\u-kwargs)
文件“/home/ubuntu/deployment/dags/venv/lib/python3.6/site packages/docker/utils/decorators.py”,第34行,在包装器中
返回f(自,*args,**kwargs)
文件“/home/ubuntu/deployment/dags/venv/lib/python3.6/site packages/docker/api/service.py”,第190行,在create_服务中
self.\u post\u json(url,data=data,headers=headers),True
文件“/home/ubuntu/deployment/dags/venv/lib/python3.6/site-packages/docker/api/client.py”,第274行,结果
自我提升状态(响应)
文件“/home/ubuntu/deployment/dags/venv/lib/python3.6/site packages/docker/api/client.py”,第270行,处于“上升”状态
从http异常(e)引发创建api错误
文件“/home/ubuntu/deployment/dags/venv/lib/python3.6/site packages/docker/errors.py”,第31行,创建api\u error\u from\u http\u异常
提高cls(e,响应=响应,解释=解释)
docker.errors.apierro:http的400客户端错误+docker://localhost/v1.41/services/create: 错误的请求(“json:无法将对象解组到Go结构字段Placement.TaskTemplate.Placement.Constraints,类型为[]string”)
我指的是文件

如何使用放置对象来使用约束


我还尝试了
constraints=[“Placement(constraints=['worker']”]
我得到了上述问题的答案。在文档中,提到了str的
列表需要在constraints中传递

提到的参数是文档:
约束(str列表)–放置约束。

所以最后的代码是

import docker
from docker.types import RestartPolicy, Placement

def python_sdk():
    client = docker.DockerClient(base_url='unix://var/run/docker.sock')
    service_created = client.services.create(
        image='python:3.7-alpine',
        command='python /home/ubuntu/python.py',
        constraints=['node.role == worker']),
        mounts='/home/ubuntu/deployment/python.py:/home/ubuntu/python.py:rw',
        networks=['test_net'],
        restart_policy=RestartPolicy(condition='none'),
        name='python_sdk'
    )
    print("Created service : ", service_created)