【问题标题】:Docker app not able to access from host machineDocker 应用程序无法从主机访问
【发布时间】:2021-09-28 09:20:26
【问题描述】:

我创建了一个 docker 文件并使用该文件创建了一个 docker 容器。但是无法从主机访问 docker webapp。 我正在使用 WSL2 来运行 docker。我的 docker 容器在我的 ubuntu 发行版中。当我启动容器时,它说应用程序正在运行。但是当我尝试从我的 windows 机器(主机)的 chrome 访问网络服务器时,它说无法连接。我的端口映射看起来都很好。

这是我的 docker-compose.yml 文件

version: '2'
services:
  db:
    image: mysql:5.7
    restart: always
    environment:
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: dp
      MYSQL_USER: app
      MYSQL_PASSWORD: appuser
      MYSQL_ALLOW_EMPTY_PASSWORD: 'no'
    ports:
      - "3307:3306"
    volumes:
      - "./db_dump:/docker-entrypoint-initdb.d/:ro"
    container_name: mysql_db
  app:
    build:
      context:
        ./
    volumes:
      - "./dp:/app"
    ports:
      - "3000:3000"
    depends_on: 
      - db
    links: 
      - db
    environment: 
      MYSQL_HOST: db
      MYSQL_ROOT_PASSWORD: password
      MYSQL_DATABASE: dp
      MYSQL_USER: app
      MYSQL_PASSWORD: appuser
    container_name: dp_app

这是我的 Dockerfile

FROM node:14.15.5-alpine3.13
RUN mkdir -p /app
WORKDIR /app
#RUN adduser -S app
COPY ./dp/ .
RUN npm install
RUN npm install sharp --ignore-scripts=false
#RUN chown -R app /app
#USER app
EXPOSE 3000
CMD [ "npm", "run", "deploy" ]

我的根目录中有一个名为 dp 的文件夹,它是下一个 js 应用程序。我还有一个名为 db_dump 的文件夹,其中包含用于数据库设置的初始 db 脚本。

这是 dp 文件夹中 package.json 文件中的脚本

"scripts": {
    "dev": "next dev",
    "build": "next build",
    "start": "next start",
    "lint": "next lint",
    "deploy": "next build && next start"
  }

当我运行docker-compose up 时,会构建映像,然后构建下一个应用程序并使用消息启动

ready - started server on 0.0.0.0:3000, url: http://localhost:3000 由于我将容器的 3000 端口绑定到主机的 3000 端口,我应该可以从 localhost:3000 访问网络服务器,对吧?但我无法访问它。我什至尝试通过docker inspect 获取 docker 容器 ip,但这也不起作用。我尝试使用 3307 端口连接 mysql 服务器,但也无法正常工作。似乎没有错误。但无法连接。

我从另一个 wsl 实例尝试了 curl -I http://localhost:3000,它显示 200 响应。但是当我从 Windows 命令提示符尝试相同的操作时,它不起作用。无法理解问题所在。

【问题讨论】:

  • 在您的package.json 中尝试将"deploy": "next build && next start" 设置为"deploy": "next build && next start -p 3000"。 3000 实际上是一个开发端口,你不应该将它用于生产
  • @Superbman,我按照您的建议更改了脚本。但还是不行。
  • 澄清一下,您是从 Windows 还是从 Ubuntu (WSL) 执行 docker-compose up
  • 我正在从 Ubuntu WSL 运行 docker-compose up

标签: docker docker-compose wsl-2


【解决方案1】:

如果您在 Mac 或 Windows 上使用 Docker Machine,请使用 docker-machine ip MACHINE_VM 获取 Docker 主机的 IP 地址。然后,在浏览器中打开 http://MACHINE_VM_IP:5000

试试这个应该可以的。

【讨论】:

    猜你喜欢
    • 2019-09-16
    • 2022-07-25
    • 1970-01-01
    • 2018-03-18
    • 2022-11-29
    • 2021-11-06
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    相关资源
    最近更新 更多