访问docker-compose extra_hosts没有端口号

时间:2018-06-14 18:54:58

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

我在docker-compose中添加了一些extra_hosts,现在看起来像这样:

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和no localhost:3000访问网页。但不是那样,我得到的是我的网络应用程序运行在my.webapp:3000

如何避免端口号?

1 个答案:

答案 0 :(得分:0)

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

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

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

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

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

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