首页 > 解决方案 > Docker-compose 服务器无法访问

问题描述

我正在用这个目录方案开发一个网站:

.
├── api
│   ├── here is my backend application
│   └── Dockerfile,
├── client
│   ├── here is my frontend application
│   └── Dockerfile
├── docker-compose

我在 NuxtJS 中有这个 Dockerfile 的前端:

FROM node:10

# Create app directory
WORKDIR /app

COPY package.json /app

RUN npm install

COPY . /app

RUN npm run build

ENV HOST 0.0.0.0
EXPOSE 3000

# start command
CMD [ "npm", "start"]

我的后端是带有这个 Dockerfile 的strapi:

FROM strapi/base:latest

# Create app directory
WORKDIR /app

COPY package.json /app

# install
RUN npm install

COPY . /app

# RUN rm yarn.lock
# RUN npm
RUN npm run build

ENV HOST 0.0.0.0
EXPOSE 1337

# start command
CMD [ "npm", "start"]

最后这是我的 docker-compose.yaml 文件:

version: '3'

services:
  frontend:
    build:
      context: ./client
      dockerfile: Dockerfile
    volumes:
      - ./client:/app
      - /app/node_modules
      - /app/.nuxt
    stdin_open: true
    tty: true
    environment:
      - HOST=0.0.0.0
      - CHOKIDAR_USEPOLLING=true
    ports:
      - 3000:3000
    depends_on:
      - "backend"

  backend:
    build:
      context: ./api
      dockerfile: Dockerfile
    volumes:
      - ./api:/app
      - /app/node_modules
    stdin_open: true
    tty: true
    environment:
      - HOST=0.0.0.0
      - CHOKIDAR_USEPOLLING=true
    ports:
      - 1337:1337

当我尝试分别构建两个图像然后运行它们时,一切正常,前端能够调用后端。但是,如果我尝试使用docker-compose updocker-compose using ,前端和后端都会启动,但是前端无法访问后端。你能帮我看看有什么问题吗?为什么?

谢谢

标签: docker

解决方案


Compose 将启动两个不同的 Docker 容器加入网络(请参阅https://docs.docker.com/compose/networking/)。

他们可以通过您在撰写文件中使用的名称相互访问:

  • 前端可通过 http://frontend:3000 访问后端容器
  • 通过 http://backend:1337 获取前端容器的后端

这与您从运行 docker 的主机访问它们的方式不同。在那里你可以使用本地主机。从每个容器中,您需要使用正确的网络名称。因为在前端容器中只有前端正在运行和监听,所以没有人在 localhost:1337 上监听。

通常,您可以通过环境变量配置后端 url,并使用 localhost 作为默认值,以便在没有 docker 的情况下在本地运行它们。在 Docker Compose 中,您需要像使用 HOST 一样通过 environment 部分覆盖配置参数。

检查您的前端框架应该如何完成: https ://nuxtjs.org/docs/2.x/configuration-glossary/configuration-env


推荐阅读