无法从本地运行的 docker 访问 Zeromq

Cannot access Zeromq from docker runned locally

我正在尝试在 docker 中访问我的 zeromq 运行。在我的代码中,我使用:

const socket = new ZeroMQ.Pull()
socket.connect(`tcp://${process.env.IP}:${process.env.PORT}`)
// other logic here

我的 IP 和端口设置为 0.0.0.0 & 4000

这是我的 DockerFile

FROM node:12-alpine AS BUILD_IMAGE

# update
RUN apk update && apk add curl bash && rm -rf /var/cache/apk/*

# install node-prune (https://github.com/tj/node-prune)
RUN curl -sfL https://install.goreleaser.com/github.com/tj/node-prune.sh | bash -s -- -b /usr/local/bin

WORKDIR /usr/tile-service

COPY package.json ./

# install dependencies
RUN npm install

# Bundle app source
COPY . .

# remove development dependencies
RUN npm prune --production

# run node prune
RUN /usr/local/bin/node-prune

FROM node:12-alpine

WORKDIR /usr/tile-service

# copy from build image
COPY --from=BUILD_IMAGE /usr/tile-service .

RUN npm rebuild --verbose sharpnpm rebuild --verbose sharp

# install poppler (https://github.com/freedesktop/poppler)
RUN apk add poppler-data
RUN apk add poppler-utils

# install nodemon
RUN npm install nodemon

EXPOSE 4000
CMD ["npm", "run", "start"]

这个运行没关系,当我运行我的制作人在docker里面的时候。现在,我想在本地 运行 我的制作人。

我的制作人就是这个样子

const socket = new ZeroMQ.Push()
try {
    await socket.bind(`tcp://${process.env.IP}:${process.env.PORT}`)
    // other logic here
} catch (error) {
    console.error(error)
}

其中 IP 和端口设置为 192.168.1.6 & 4000。我还尝试使用 0.0.0.0172.17.0.2(docker 容器的 IP)。我的 docker 运行 在 4000/tcp.

并且此设置似乎没有在我的 docker.

中调用我的 zeromq 运行 中的函数

试试下面的方法

  • 检查启动容器时是否映射了端口
docker run -itd -p 4000:4000 .... `

  • 如果端口映射正确,请尝试使用 IP 为 127.0.0.1 或本地主机访问 ZeroMq

您没有提到您是 运行 Docker 本机还是使用 VM。如果您 运行 在 VM 中,则 IP 将更改

如果有人感兴趣,这是我找到的解决方案。 当 运行 服务器时,我将 IP 更改为 host.docker.internal。然后当 运行 客户端时,我使用 IP 127.0.0.1

我现在知道的是客户端的 IP 发生了变化 docker 是 运行。因为 docker 在我的本地主机上是 运行,所以我使用 127.0.0.1。我不确定这个配置在部署到云端后是否会保持不变。