【问题标题】:How to access external port in docker-compose如何在 docker-compose 中访问外部端口
【发布时间】:2019-11-07 02:38:48
【问题描述】:

我想将我的 docker-compose 配置用于开发目的,并运行前端、后端、nginx 来让路由服务一起运行和启动。现在我也在使用 kubernetes 端口转发来访问我的 neo4j 数据库。我想要实现的是在 docker 容器中使用映射端口,即。外部端口也应该在 docker 内可见。它可以在没有 docker 的情况下顺利运行,但不能在容器内运行。我的 docker-compose 文件看起来像这样,没什么花哨的:

version: '3'

networks:
  lan:

services:
  nginx:
    restart: always
    build:
      dockerfile: Dockerfile.dev
      context: ./nginx
    ports:
      - 3050:80
    depends_on:
      - client
      - api

  client:
    build:
      context: ./client
      dockerfile: Dockerfile.dev
    volumes:
      - /app/node_modules
      - ./client:/app

  api:
    build:
      context: ./
      dockerfile: Dockerfile.dev
    volumes:
      - /app/node_modules
      - ./:/app
    environment:
      - REACT_APP_NEO4J_HOST=neo4j://neo4j:password@localhost:7687
      - REACT_APP_NEO4J_LOGIN=neo4j
      - REACT_APP_NEO4J_PASS=password

不幸的是,我收到错误,因为它不是我的 docker api 容器中的转发器。转发我正在使用的端口(经过身份验证后): kubectl port-forward svc/neo4j-ee-neo4j 7687:7687 但当然它只在我的主机上可用。

【问题讨论】:

  • 您无法从 docker 容器访问主机上的端口。我自己没有尝试过,但是如果我遇到你的情况,我可以尝试的一件事是构建一个包含 kubectl 的 docker 映像,挂载 kubectl 配置,然后从 docker 容器运行它以创建一个端口转发到k8s 集群。然后其他容器应该能够连接到该新容器。同样,我自己没有尝试过。
  • 你能在 Docker Compose 中运行所有东西,或者在 Kubernetes 中运行所有东西,而不是尝试将两者混合使用吗?
  • 嗯,我可以试试,但我不确定我能做到。 Neo4J 部署在谷歌云中(不是我,也不是我维护的),但所有其他服务都在本地以开发模式运行(反应部分,快递部分,nginx)。我想要实现的是使用一个简单的命令立即启动和运行所有这些服务,就像在 docker compose world 中一样(通过docker-compose up)。

标签: docker kubernetes docker-compose


【解决方案1】:

network_mode: "host" 添加到服务属性中,这样它将共享主机接口。 https://docs.docker.com/compose/compose-file/#network_mode

【讨论】:

  • 但是没有网络连接所有容器,不是吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-04
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2020-02-21
  • 2015-09-24
相关资源
最近更新 更多