无法从本地运行的 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.0
和 172.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。我不确定这个配置在部署到云端后是否会保持不变。
我正在尝试在 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.0
和 172.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。我不确定这个配置在部署到云端后是否会保持不变。