【发布时间】:2017-10-20 20:47:01
【问题描述】:
我们想做的事:
我们想使用 docker-compose 将一个已经运行的容器 (A) 链接到另一个容器 (B) 按容器名称。我们使用“external-link”,因为两个容器都是从不同的 docker-compose.yml 文件启动的。
问题:
尽管同名容器正在运行,但容器 B 无法启动并出现错误。
ERROR: for container_b Cannot start service container_b: Cannot link to a non running container: /PREVIOUSLY_LINKED_ID_container_a_1 AS /container_b_1/container_a_1
“docker ps”的输出:
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
RUNNING_ID container_a "/docker-entrypoint.s" 15 minutes ago Up 15 minutes 5432/tcp container_a_1
示例代码:
容器B的docker-compose.yml:
container_b:
external_links:
- container_a_1
这个问题与其他“如何解决”问题有什么不同:
- 我们不能使用“sudo service docker restart”(有效),因为这是生产环境
- 我们不想每次都手动解决这个问题,但要找到原因,以便我们可以
- 了解我们做错了什么
- 了解如何避免这种情况
假设:
- 似乎存在两个 container_a 实例(RUNNING_ID 和 PREVIOUSLY_LINKED_ID)
- 这可能是因为我们
- 通过 docker-compose build 重建容器并
- 更改了容器的转发外部端口(808
01:8080)
评论
- 不要按照 cmets 的建议使用
docker-compose down,这会删除卷!
【问题讨论】:
-
您是否在 compose 中重新启动容器?还是您又在使用
docker-compose down和docker-compose up? -
感谢您的回复。老实说,我不知道“down”这个命令。现在我正在使用 Ctrl+C(当它们在前台时)或当它们在后台时使用“docker stop container_name”。你觉得这应该有什么不同吗?为什么?如果没有其他建议,我将开始尝试 docker-compose down 并在一段时间后报告。
-
它对你有用吗?
-
我还没有机会在日常使用中测试它,因为我在前台模式下生成 docker 容器以始终查看每个容器的日志输出。我可以尝试使用该命令而不是 Ctrl+C 来关闭它们,但我仍然不明白为什么这个命令会有所作为?你有提示吗?
-
@Tarun Lalwani:测试
docker-compose down是一次非常不愉快的经历:(我的 --help 输出错误,它只是在停止它后删除了我们的卷 ...不酷。不要使用这个docker-compose down只是为了停止一个容器!
标签: docker docker-compose docker-container docker-link