docker 如何从动态创建的容器向属于另一个网络的容器进行API调用?

nx7onnlm  于 2023-05-16  发布在  Docker
关注(0)|答案(1)|浏览(218)

我的简化docker compose文件

services:
  myapp:
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
    networks:
      - mynetwork
    ports:
      - 3000:3000
networks:
  mynetwork:

我运行这两个命令来升级我的容器

docker swarm init
docker stack deploy -c docker-compose.yml app

现在,在应用程序中,我使用**dockerode来创建动态容器。我在动态创建的容器中有一些代码,它执行对myapp容器的API调用。但是,当使用urlhttp://myapp:3000**触发该调用时,它会失败,因为它没有任何关于网络的上下文。所以我尝试添加由docker compose创建的网络。但这也失败了。
用于创建动态容器并尝试将其附加到同一网络的代码

const Docker = require("dockerode");

const docker = new Docker({
  socketPath: "/var/run/docker.sock",
});

let network = docker.getNetwork("mynetwork");

let container = await docker.createContainer({
  Image: '1234567890',
  NetworkMode: "mynetwork",
});

await network.connect({
  Container: container.id,
});

container.start();

在此之后我得到这个错误

Error: (HTTP code 500) server error - Could not attach to network mynetwork: rpc error: code = NotFound desc = network mynetwork not found 
    at /app/node_modules/docker-modem/lib/modem.js:343:17
    at getCause (/app/node_modules/docker-modem/lib/modem.js:373:7)
    at Modem.buildPayload (/app/node_modules/docker-modem/lib/modem.js:342:5)
    at IncomingMessage.<anonymous> (/app/node_modules/docker-modem/lib/modem.js:310:16)
    at IncomingMessage.emit (node:events:523:35)
    at endReadableNT (node:internal/streams/readable:1367:12)
    at process.processTicksAndRejections (node:internal/process/task_queues:82:21) {
  reason: 'server error',
  statusCode: 500,
  json: {
    message: 'Could not attach to network mynetwork: rpc error: code = NotFound desc = network mynetwork not found'
  }
}

将动态创建的容器连接到网络的正确方法是什么?

jq6vz3qz

jq6vz3qz1#

这个网络不叫mynetwork。Docker compose会在前面添加一个'project name'。默认情况下,项目名称是docker-compose.yml文件所在的目录名称。
如果您的目录名为“mydirectory”,则网络名称将为mydirectory_mynetwork
使用docker network ls找出名称并在节点程序中使用该名称。

相关问题