-3

我正在尝试在 python 代码中使用 OS env 变量。下面是例子。

环境变量

    导出 DOCKER_HOST=10.0.0.5
    出口端口=1002

Python代码

    导入操作系统
    进口码头
    主机 = os.environ['DOCKER_HOST']
    端口 = os.environ['PORT']
    客户端 = docker.APIClient(base_url='tcp://host:port')

它应该注入主机和端口的变量,但它不起作用。我试图添加无助的 .format

错误

赛跑(最近一次通话最后):
  文件“./update.py”,第 24 行,在
    客户端 = docker.APIClient(base_url="tcp://docker_host:docker_port")
  文件“/usr/local/lib/python2.7/dist-packages/docker/api/client.py”,第 109 行,在 __init__
    base_url,IS_WINDOWS_PLATFORM,tls=bool(tls)
  文件“/usr/local/lib/python2.7/dist-packages/docker/utils/utils.py”,第 363 行,在 parse_host
    "无效端口:{0}".format(addr)
docker.errors.DockerException:端口无效:docker_host:docker_port
4

1 回答 1

2

您的问题如下

client = docker.APIClient(base_url='tcp://host:port')

您正在使用host:port作为文字字符串。Python 在 Python 3.6 之前没有字符串插值。您可以使用以下方法之一

client = docker.APIClient(base_url='tcp://' + host + ':' + port)
client = docker.APIClient(base_url='tcp://{}:{}'.format(host,port))
client = docker.APIClient(base_url='tcp://{0}:{1}'.format(host,port))
client = docker.APIClient(base_url='tcp://{host}:{port}'.format(host=host,port=port))
client = docker.APIClient(base_url='tcp://%s:%s' % (host,port))

编辑-1

感谢@code_onkel 指出 Python 3.6 中的字符串插值(之前没有使用过)。如果您使用的是 Python 3.6.X,也可以在下面使用

client = docker.APIClient(base_url=f'tcp://{host}:{port}')

f字符串之前的很重要。有关详细信息,请参阅PEP 498

于 2017-09-15T21:25:31.540 回答