首页 > 解决方案 > 有没有办法在 Docker 上使用 --link 和 --net=host ?

问题描述

我正在制作一个节点反向代理系统,当我在 Docker 上没有它时,一切都可以 100% 运行,但是当我将它放在 Docker 上时,我无法访问不在同一个 docker 容器中运行的服务。

目前,我的设置是 1x Redis 容器、1x MongoDB 容器和 1x 代理容器(通过 --link homerouter-redis --link homerouter-mongo 链接在一起)。就这样,一切都按预期工作,哇!除了,当我尝试反向代理未在 Docker 内运行的服务时,例如在端口:8080 上,我无法连接。所以,经过一番研究,我发现了 --net=host,但是它成功了,所以我不能使用我的 Redis 和 Mongo 容器,因为它会说连接被拒绝。

我已经搜索了一段时间,似乎找不到解决这个问题的方法,任何帮助将不胜感激!

Docker Compose(在这种情况下未使用,但仍然如此)

version: '3.3'
services:
  mongo:
    container_name: homerouter-mongo
    image: 'mongo:4'
    ports:
      - 27017:27017
  redis:
    container_name: homerouter-redis
    image: 'redis:5'
    command: redis-server
    ports:
      - 6376:6379
  homerouter:
    privileged: true
    container_name: homerouter
    restart: on-failure
    build: .
    volumes:
      - ./:/usr/src/app
      - /usr/src/app/node_modules
    ports:
      - 80:80
    links:
      - redis
      - mongo
    depends_on: 
      - redis
      - mongo
    command: npm start

Dockerfile

FROM node:10
WORKDIR /usr/src/homerouter

COPY package*.json ./

RUN npm install
COPY . .

CMD ["npm", "run", "start:prod"]

EXPOSE 80

(另外,一个完全题外话的问题,Docker Compose 生产准备好了吗?)

标签: dockerdocker-composedockerfile

解决方案


回答 我需要做的就是将 --net=host 添加到所有这些,并且在连接时不再使用容器名称(相反,我使用了 127.0.0.1)


推荐阅读