【问题标题】:Docker for Mac | Docker Compose | Cannot access containers using localhostDocker for Mac |码头工人撰写 |无法使用 localhost 访问容器
【发布时间】:2019-01-10 22:56:27
【问题描述】:

我一直在试图弄清楚为什么我不能使用来自主机的“localhost:3000”容器。我尝试通过 Homebrew 安装 Docker,以及 Docker for Mac 安装程序。我相信我已经正确配置了 docker-compose 文件。

这是 docker-compose ps 的输出

           Name                         Command               State                       Ports
--------------------------------------------------------------------------------------------------------------------
ecm-datacontroller_db_1      docker-entrypoint.sh postgres    Up      0.0.0.0:5432->5432/tcp
ecm-datacontroller_kafka_1   supervisord -n                   Up      0.0.0.0:2181->2181/tcp, 0.0.0.0:9092->9092/tcp
ecm-datacontroller_redis_1   docker-entrypoint.sh redis ...   Up      0.0.0.0:6379->6379/tcp
ecm-datacontroller_web_1     npm start                        Up      0.0.0.0:3000->3000/tcp

这是我的 docker-compose.yml

version: '2'
services:
  web:
    ports:
      - "3000:3000"
    build: .
    command: npm start
    env_file: .env
    depends_on:
      - db
      - redis
      - kafka
    volumes:
      - .:/app/user
  db:
    image: postgres:latest
    ports:
      - "5432:5432"
  redis:
    image: redis:alpine
    ports:
      - "6379:6379"
  kafka:
    image: heroku/kafka
    ports:
      - "2181:2181"
      - "9092:9092"

我无法使用curl localhost:3000 访问 docker-compose 公开的任何端口,我从中得到以下结果

curl: (52) Empty reply from server

我应该得到{"hello":"world"}

Dockerfile:

FROM heroku/heroku:16-build

# Which version of node?
ENV NODE_ENGINE 10.15.0
# Locate our binaries
ENV PATH /app/heroku/node/bin/:/app/user/node_modules/.bin:$PATH

# Create some needed directories
RUN mkdir -p /app/heroku/node /app/.profile.d
WORKDIR /app/user

# Install node
RUN curl -s https://s3pository.heroku.com/node/v$NODE_ENGINE/node-v$NODE_ENGINE-linux-x64.tar.gz | tar --strip-components=1 -xz -C /app/heroku/node

# Export the node path in .profile.d
RUN echo "export PATH=\"/app/heroku/node/bin:/app/user/node_modules/.bin:\$PATH\"" > /app/.profile.d/nodejs.sh

ADD package.json /app/user/
RUN /app/heroku/node/bin/npm install
ADD . /app/user/

EXPOSE 3000

有人有什么想法吗?

【问题讨论】:

  • 在 mac 上,您可以检查是否有人在监听端口:lsof -i。你看到这些端口打开了吗?
  • 嗯..不,我没有。这些端口都没有出现在lsof -i 上。我现在想知道 Docker 是否无法访问开放端口。
  • 您可以将您的 yml 文件缩减为一个服务,然后查看该端口是否实际打开。
  • 请分享您的 Dockerfile
  • 这类似于容器内部进程绑定到 127.0.0.1 并且无法从容器外部访问的症状(而不是绑定到 0.0.0.0;这会打印在启动时日志消息中) .例如比较Docker ports are not exposed

标签: docker docker-compose


【解决方案1】:

最终,我得到了一个监听 127.0.0.1 而不是 0.0.0.0 的服务。更新这个解决了我遇到的连接问题。

【讨论】:

    猜你喜欢
    • 2018-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-29
    相关资源
    最近更新 更多