使用docker-py时的奇怪行为

51次阅读
没有评论

问题描述

在使用Python的docker-py插件时遇到了一些奇怪的行为。他在代码中创建了一个容器,但出现了一些问题,包括端口未开放以及容器在docker ps中未显示出来。

解决方案

请注意以下操作可能涉及版本差异及风险,务必做好备份。

使用docker.containers.run()代替docker.containers.create()

你在代码中使用了docker.containers.create()方法来创建容器,但是该方法只会创建容器而不会启动它。根据文档,docker.containers.create()用于创建一个容器,但不会启动它。要创建并启动容器,你应该使用docker.containers.run()方法。
下面是一个示例代码片段,展示如何使用docker.containers.run()来创建并启动容器:

ingreedy = client.containers.run("openfoodbroker/ingreedy.service",
                                 name="ingreedy_service",
                                 detach=True,
                                 ports={'5000': 5000})
print(ingreedy.id)

通过使用docker.containers.run()方法,你可以在容器创建的同时启动它,并且指定的端口映射也会生效。

启动容器

另一种方法是在使用docker.containers.create()方法创建容器后,通过调用容器对象的start()方法来手动启动容器。这样可以确保容器正常运行并且端口映射生效。
以下是一个示例代码片段,展示如何使用start()方法来启动容器:

ingreedy = client.containers.create("openfoodbroker/ingreedy.service",
                                    name="ingreedy_service",
                                    detach=True,
                                    ports={'5000': 5000})
ingreedy.start()  # 启动容器
print(ingreedy.id)

检查容器状态和端口映射

请注意,使用docker ps默认只显示正在运行的容器。如果你想查看所有容器(包括已创建但未运行的容器),可以使用docker ps -a命令。如果容器状态显示为”created”,说明容器已成功创建,但尚未启动。
关于端口映射,确保容器内的应用程序也在指定的端口上监听。如果容器内的应用程序没有正确绑定到端口,端口映射将不会生效。

通过以上方法,你应该能够解决容器未启动和端口映射问题。如果问题仍然存在,你可能需要检查容器的日志以获取更多详细信息。

回答参考了用户最佳投票回答,感谢用户对解决方案的贡献。

请确保在操作前仔细阅读相关文档和备份数据,以避免不必要的损失和风险。

正文完