首页 > 解决方案 > 从 python 创建容器时,Docker API 无法识别“npipe”挂载类型

问题描述

我正在尝试以编程方式创建一个 docker 容器,该容器与在主机上运行的服务通信并在命名管道(又名 unix 套接字)上侦听。我得到:APIError:400 客户端错误:错误请求(“npipe 类型的安装配置无效:安装类型未知”)

我的设置包括: Docker 版本 18.09.7,构建 2d0083d Python 2.7.12 docker==4.0.1(来自 pip freeze)

进口

docker
from docker.types import Mount

mounts = [
    Mount('/tmp/redis.sock', '/tmp/redis.sock', type='npipe'),
    Mount('/opt/data/', '/tmp'),
]

client = docker.from_env()
client.containers.run(
    "alpine", 
    **{
        "command":"sleep 600", 
        "network_mode": "host", 
        "mounts": mounts
    }
)

我没有运行“睡眠”容器,而是得到:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/grok/ve/grok/local/lib/python2.7/site-packages/docker/models/containers.py", line 803, in run
    detach=detach, **kwargs)
  File "/opt/grok/ve/grok/local/lib/python2.7/site-packages/docker/models/containers.py", line 861, in create
    resp = self.client.api.create_container(**create_kwargs)
  File "/opt/grok/ve/grok/local/lib/python2.7/site-packages/docker/api/container.py", line 429, in create_container
    return self.create_container_from_config(config, name)
  File "/opt/grok/ve/grok/local/lib/python2.7/site-packages/docker/api/container.py", line 440, in create_container_from_config
    return self._result(res, True)
  File "/opt/grok/ve/grok/local/lib/python2.7/site-packages/docker/api/client.py", line 267, in _result
    self._raise_for_status(response)
  File "/opt/grok/ve/grok/local/lib/python2.7/site-packages/docker/api/client.py", line 263, in _raise_for_status
    raise create_api_error_from_http_exception(e)
  File "/opt/grok/ve/grok/local/lib/python2.7/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: Bad Request ("invalid mount config for type "npipe": mount type unknown")

任何想法发生了什么?谢谢!

标签: pythondockersocketsmount

解决方案


遇到了类似的问题。它的文档记录很差,但看起来npipe安装是特定于 Windows 的。我猜在 Linux 和 macOS 上,您应该创建自己的并将其与任何其他文件一样绑定挂载。


推荐阅读