【问题标题】:access docker-compose extra_hosts with no port number访问没有端口号的 docker-compose extra_hosts
【发布时间】:2018-06-14 18:54:57
【问题描述】:

我在我的 docker-compose 中添加了一些额外的主机,现在看起来像这样:

version: '3'
services:
  memcached:
    image: memcached:1.5.2-alpine
    restart: always
    ports:
      - "11211:11211"

  postgres:
    image: postgres:9.4-alpine
    restart: always
    volumes:
      - ~/.engine-data/postgres:/var/lib/postgresql/data
    ports:
      - "5432:5432"
    environment:
      - POSTGRES_DB=myapp_development
      - POSTGRES_USER=default
      - POSTGRES_PASSWORD=secret

  redis:
    image: redis:3.2.0-alpine
    restart: always
    volumes:
      - ~/.engine-data/redis:/data
    ports:
      - "6379:6379"

  web:
    build:
      context: .
      dockerfile: "Dockerfile"
    command: ./wait-for-it.sh redis:6379 -- ./wait-for-it.sh postgres:5432 -- bundle exec rails s -p 3000 -b '0.0.0.0'
    volumes:
      - .:/opt/apps/engine
    depends_on:
      - memcached
      - redis
      - postgres
    ports:
      - "3000:3000"
    env_file:
      - .env
    extra_hosts:
     - "my.api:127.0.0.1"
     - "my.webapp:127.0.0.1"

我的意图是使用 my.webapp 访问网络,而不使用 localhost:3000。但取而代之的是,我得到的是在 my.webapp:3000 上运行的网络应用程序

如何避免端口号?

【问题讨论】:

    标签: ruby-on-rails docker docker-compose port


    【解决方案1】:

    使用 http 时,如果 URL 中未指定数字,您的浏览器将使用默认端口 80。

    如果要使用非标准端口,必须在 URL 中指定。

    例如,如果我的网络服务器在 www.example.com 主机的 80 端口上运行,我可以在浏览器中输入http://www.example.com/,它就可以连接到 80 端口。

    如果我使用的是非标准端口(如 3000),那么我必须像这样输入 URL:http://www.example.com:3000/

    在您的情况下,不必指定端口 3000,您应该更新您的 compose 文件以发布到主机的端口 80 而不是主机的端口 3000。在 docker 和 docker-compose 中的端口发布采用 : 格式。这意味着您需要在撰写文件中从 3000:3000 切换到 80:3000 并重新运行 docker-compose up -d

    您还提到希望使用“my.webapp”主机名而不是“localhost”主机名来访问您的服务。您可以通过在您的计算机上添加主机文件条目来实现此目的,以便“my.webapp”解析为 127.0.0.1。您还可以使用任何其他数量的 DNS 名称解析方法来实现相同的目的。

    【讨论】:

    • 我不需要编辑 hosts 文件,因为这正是 docker-compose 的 extra_hosts 所做的(在 docker 容器内的主机中)。但是你在港口是非常正确的。谢谢!
    • 请注意,extra_hosts 不会对主机中可解析的内容进行任何更改,只会更改容器内可解析的内容。
    • 但我在容器内运行应用程序。这意味着那里发生的一切都将与 extra_hosts 中的配置相匹配。不是@programmerq 吗?
    • 那么您发布到主机的端口可能无关紧要。如果您根本没有从外部访问容器化应用程序,那么只需跳过发布端口即可。您还需要更新您的容器化应用程序以直接侦听端口 80 而不是 3000。
    猜你喜欢
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-29
    • 2020-09-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多