问题标签 [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.
mongodb - '--link' 似乎无法连接两个 Docker 容器
我想在容器中运行 MongoDB,这可行:
然后我想在另一个容器中运行服务器,如下所示:
node.js 服务器尝试与 建立 mongodb 连接localhost:27017
,但无法建立连接。
有谁知道为什么会发生这种情况?我没有正确链接容器吗?
请注意,我可以从容器外部成功连接到 mongodb 容器,但不能从“foo”容器内的服务器。
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”别名一个“静态”主机名?
任何建议将不胜感激。
提前致谢!
docker - 在链接上找不到 docker 容器
我正在尝试在 node1.com 上创建一个 docker 容器“bar_foo”,该容器链接到另一个节点“foo_bar:node2.com”上的另一个容器。
问题是我出错了。
我确保 foo_bar 容器成功运行,node2.com 上的其他容器正确链接到它。
我也尝试过成功 ping node2.com。
创建容器是通过 ansible 完成的:
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
01 :8080)
评论
- 不要
docker-compose down
按照评论中的建议使用,这会删除体积!
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
它开始continer IP
于:10.XXX
我也尝试过,add --net managed
但错误:network managed not found
我相信我错过了在这个 docker 链接过程中理解的一些东西。请给我一些想法,我怎样才能使这些工作。
(以前当我创建相同的容器并链接到 GUI 中的 mysql 时它正在工作)
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 后
docker - 当我仍然需要对地址进行硬编码时,为什么还要使用 docker 链接?
您好,我还没有理解以下内容:
docker
-根据我的理解,我们拥有的世界:
application
暴露的端口- 容器为应用程序公开的端口
- 主机映射容器端口的端口
因此,在 2 个容器的配置中给出这些事实docker-expose
如果:
如果需要通过直接app2
与通信进行通信,我为什么要使用链接,因为我仍然必须在(容器的和容器的容器名称)的环境中以某种方式进行硬编码?(在 我们的示例中:和)app1
docker-host
app2
hostname
port
app1
app1
port
app1
port=8200
host=app1Inst
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
docker - 从另一个容器访问一个容器的端口
我在一个容器中有一个 postgres 数据库,在另一个容器中有一个 java 应用程序。Postgres 数据库可从 localhost 中的端口 1310 访问,但 java 容器无法访问它。我试过这个命令:
但它给出了错误java.net.UnknownHostException: biggdb
。
这是我的docker-compose.yml
文件:
biggdb 的 Dockerfile:
有人可以告诉我需要在 docker-compose.yml 或命令中做哪些更改,以使 java 容器访问 biggdb(postgres)容器的端口吗?