问题标签 [docker-link]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
319 浏览

mongodb - '--link' 似乎无法连接两个 Docker 容器

我想在容器中运行 MongoDB,这可行:

然后我想在另一个容器中运行服务器,如下所示:

node.js 服务器尝试与 建立 mongodb 连接localhost:27017,但无法建立连接。

有谁知道为什么会发生这种情况?我没有正确链接容器吗?

请注意,我可以从容器外部成功连接到 mongodb 容器,但不能从“foo”容器内的服务器。

0 投票
1 回答
53 浏览

docker - Docker Networking - 链接还是不链接?

我们有 1000 多个 python 单元测试,为了有效地运行它们,我们分批并行化它们。每个批次都有自己的 Docker 环境,由核心应用程序和一个 mongo 实例组成。它的设置是这样的:

docker network create --driver bridge ut_network-1

docker network create --driver bridge ut_network-2

docker run -d --name mongo-unittest-1 --network ut_network-1 mongo:3.4.2

docker run -d --name mongo-unittest-2 --network ut_network-1 mongo:3.4.2

docker run untapt_ut --rm --network ut_network-{%} --link mongo-unittest-{%}:db python discover.py

连接字符串是“mongodb://db:27017/mydb”

{%} 是与环境关联的数字 - 因此在 ut_network-1 上,数据库将是 mongo-unittest-1。请注意“db”的别名。

这工作正常,但我读到--link 将被弃用

我认为解决方案就像删除 --link 并设置主机名一样简单:

docker run -d --hostname db --network ut_network-1 mongo:3.4.2

docker run -d --hostname db --network ut_network-2 mongo:3.4.2

docker run untapt_ut --rm --network ut_network-{%} python discover.py

但是,如果我这样做,那么应用程序将找不到 mongo 实例。更远:

  • 我不能使用--name db,因为 Docker 会尝试创建多个名为“db”的容器,这显然是无法做到的(即使它们位于不同的网络上)。
  • mongo 数据库的默认主机名是容器 id 的前几位数字。我的单元测试都从一个假定数据库名为“db”的秘密文件中获取 mongo 数据库字符串。
  • 正如我所说,如果我使用--hostname db核心应用程序找不到 mongo 实例。但是,如果我将容器 id 硬编码为服务器,那么核心应用程序会很好地找到 mongo 实例。
  • 我想保留别名'db',以便单元测试可以使用一个单一的源来获取我不需要弄乱的 mongo 数据库字符串。

这里的文档暗示我可以使用--link。

那么我这样做正确吗?或者如果没有,我应该如何配置 Docker 网络以便我可以创建多个网络并为“db”别名一个“静态”主机名?

任何建议将不胜感激。

提前致谢!

0 投票
1 回答
161 浏览

docker - 在链接上找不到 docker 容器

我正在尝试在 node1.com 上创建一个 docker 容器“bar_foo”,该容器链接到另一个节点“foo_bar:node2.com”上的另一个容器。

问题是我出错了。

我确保 foo_bar 容器成功运行,node2.com 上的其他容器正确链接到它。

我也尝试过成功 ping node2.com。

创建容器是通过 ansible 完成的:

0 投票
1 回答
6533 浏览

docker - 当外部链接的容器使用 docker-compose 实际运行时,如何避免“Docker 无法链接到非运行的容器”错误

我们想做的事:

我们想使用docker-compose通过容器名称将一个已经运行的容器(A)链接到另一个容器(B)。我们使用“ external-link ”,因为两个容器都是从不同的 docker-compose.yml 文件启动的。

问题:

尽管具有该名称的容器正在运行,但容器 B 无法启动并出现错误。

“docker ps”的输出

示例代码:

容器 B 的 docker-compose.yml

这个问题与其他“如何解决”问题有什么不同:

  • 我们不能使用“sudo service docker restart”(有效),因为这是一个生产环境
  • 我们不想每次都手动解决这个问题,但要找到原因,以便我们可以
    • 了解我们做错了什么
    • 了解如何避免这种情况

假设:

  • 似乎存在两个 container_a 实例(RUNNING_ID 和 PREVIOUSLY_LINKED_ID)
  • 这可能会发生,因为我们
    • 通过 docker-compose build 重建容器并
    • 更改了容器的转发外部端口(808 0 1 :8080)

评论

  • 不要docker-compose down按照评论中的建议使用,这会删除体积!
0 投票
2 回答
1613 浏览

docker - 在 docker 中链接容器(RancherOS 和命令行)

  • 我运行 RancherOS 来运行 docker 容器
  • 我在 GUI 上创建了一个容器来运行我的数据库(图像:mysql,名称:r-mysql-e4e8df05)。不同的容器使用它。
  • 我可以在 GUI 上将其他容器链接到它 在此处输入图像描述
  • 这次我想在jenkins上自动创建和启动一个容器,但是链接效果不好

我的命令:

我得到错误:

我尝试了不同的东西:
1)

错误:

2)
尝试使用--net选项
运行:docker network ls

  • 它成功了--net none,但实际上它不起作用。该应用程序无法连接到数据库
  • 带有--net host错误信息conflicting options: host type networking can't be used with links. This would result in undefined behavior
  • 带有--net bridge错误消息:Cannot link to /r-mysql-e4e8df05, as it does not belong to the default network

我还检查了这个mysql运行的rancher GUI: 在此处输入图像描述

它开始continer IP于:10.XXX

我也尝试过,add --net managed但错误:network managed not found

我相信我错过了在这个 docker 链接过程中理解的一些东西。请给我一些想法,我怎样才能使这些工作。
(以前当我创建相同的容器并链接到 GUI 中的 mysql 时它正在工作)

0 投票
0 回答
1107 浏览

docker - GET http://backend/api/countries net::ERR_NAME_NOT_RESOLVED

在对后端进行 CORS 调用时,我实际上遇到了错误:

GET http://backend/api/countries net::ERR_NAME_NOT_RESOLVED

我正在使用该 docker-compose:


码头工人-compose.yml


后端的nginx配置


调用后端的 Angular 服务

请注意,如果我从前端手动设置后端 IP 地址(如角度代码中所示),CORS 调用工作正常。那么,我是否在 docker-compose.yml 文件的配置中遗漏了某些内容?

PS:甚至指定了网络和容器名称,以避免 Angular 代码中的容器名称不正确。


用于前端容器的 Nginx Dockerfile


安装 dnsutils 后

0 投票
2 回答
39 浏览

docker - 当我仍然需要对地址进行硬编码时,为什么还要使用 docker 链接?

您好,我还没有理解以下内容:

docker-根据我的理解,我们拥有的世界:

  • application暴露的端口
  • 容器为应用程序公开的端口
  • 主机映射容器端口的端口

因此,在 2 个容器的配置中给出这些事实docker-expose

如果:

如果需要通过直接app2与通信进行通信,我为什么要使用链接,因为我仍然必须在(容器的和容器的容器名称)的环境中以某种方式进行硬编码?(在 我们的示例中:和)app1docker-hostapp2hostnameportapp1app1portapp1port=8200host=app1Inst

0 投票
1 回答
908 浏览

docker - 容器不在 docker-compose 中的网络中通信

我有一个 docker-compose 网络问题。ubuntu因此,我使用、tensorflow和的容器创建了我的共享空间Rstudio,它们在共享它们和主机之间的卷方面做得很好,但是当涉及到使用彼此终端内的一个容器的资源时,我撞墙。我不能像在没有它的容器的终端中调用 python 一样少。我的docker-compose.yaml

我是一个 docker 新手,所以我不确定我的网络设置。话虽如此docker inspect composetest_default(为撰写创建的默认网络)显示容器已连接到网络。据我了解,在这种情况下,我应该能够在每个其他容器中自由调用一项服务,反之亦然:

史前史 - 我曾在 docker-compose 内部尝试过,但由于一些弃用警告links:而决定更改为。networks:这是正确的方法吗?

Docker 版本 18.09.1

Docker-compose 版本 1.17.1

0 投票
2 回答
429 浏览

docker - 从另一个容器访问一个容器的端口

我在一个容器中有一个 postgres 数据库,在另一个容器中有一个 java 应用程序。Postgres 数据库可从 localhost 中的端口 1310 访问,但 java 容器无法访问它。我试过这个命令:

但它给出了错误java.net.UnknownHostException: biggdb

这是我的docker-compose.yml文件:

biggdb 的 Dockerfile:

有人可以告诉我需要在 docker-compose.yml 或命令中做哪些更改,以使 java 容器访问 biggdb(postgres)容器的端口吗?