我们想做什么:
我们希望使用 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
示例代码:
Container B的docker-compose.yml :
container_b:
external_links:
- container_a_1
这个问题与其他“如何解决”问题有什么不同?
假设:
注释
docker-compose down
,这会删除volumnes!答案 0 :(得分:1)
Docker links are deprecated所以,除非你需要一些功能,否则我们建议切换到泊坞网络。
由于您要连接的容器似乎是在单独的撰写文件中启动的,因此您可以在外部创建该网络:
namespace App;
use App\Services\Search\Builders\ListingRecordBuilder;
use Laravel\Scout\Searchable;
.
.
.
class Listings extends BaseModel
{
use Searchable;
.
.
.
public function searchableAs()
{
return 'local_listings_new';
}
public function toSearchableArray()
{
$recordBuilder = new ListingRecordBuilder($this);
return $recordBuilder->buildRecord();
}
}
然后在您的docker-compose.yml文件中,将容器连接到该网络:
docker network create app_net
然后在您的container_b中,您将连接到container_a作为“container_a”,而不是“container_a_1”。
除此之外,除非您传递version: '3'
networks:
app_net:
external:
name: app_net
services:
container_a:
# ...
networks:
- app_net
标记,否则不会记录docker-compose down
以删除卷。也许您使用的是匿名卷,在这种情况下,我不确定-v
是否知道在哪里可以找到您的数据。命名卷是首选。很可能,您的数据未存储在卷中,这很危险,并且无法更新容器:
docker-compose up