我正在尝试在 Google Cloud Platform 上运行 Docker Compose with Docker(Docker)



我是Docker和GCP的新手。我遵循此处给出的说明

我的docker-compose.yml文件看起来像:

version: '3'
services: 
  backend:
    image: com.xyz.backend:v1
    build: ./server/
    ports: 
      - "5000:5000"
    volumes:
      - ./server:/usr/src/app
      - /usr/src/app/node_modules
  frontend:
    image: com.xyz.frontend:v1
    build: ./client/
    ports:
      - "3000:3000"
    volumes:
      - ./client:/usr/src/app
      - /usr/src/app/node_modules
    links:
      - backend

docker file =>客户端/dockerfile:

FROM node:8.15.0-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ENV NODE_PATH=/node_modules
ENV PATH=$PATH:/node_modules/.bin
COPY package.json /usr/src/app
RUN npm i -g npm-check-updates
RUN ncu -u
RUN npm install
COPY . /usr/src/app
ENV PORT 3000
EXPOSE 3000
RUN pwd
CMD ["npm", "start"]

docker file =>服务器/dockerfile

FROM node:8.15.0-alpine
RUN mkdir -p /usr/src/app
WORKDIR /usr/src/app
ENV NODE_PATH=/node_modules
ENV PATH=$PATH:/node_modules/.bin
RUN npm install -g nodemon
COPY package.json /usr/src/app
RUN npm i -g npm-check-updates
RUN ncu -u
RUN npm install
COPY . /usr/src/app
ENV PORT 5000
EXPOSE 5000
RUN pwd
CMD ["npm", "start"]

cloudbuild.yaml

steps:
- name: ‘docker/compose:1.23.2’
  args: [‘up’, ‘-d’]
- name: 'gcr.io/cloud-builders/docker'
  args: ['tag', 'workspace_app:latest', 'gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA']
images: ['gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA']

项目结构:

Project
↳ client
   ↳ Dockerfile
  server
   ↳ Dockerfile
  README.md
  Dockerfile
  cloudbuild.yaml
  docker-compose.yml

当我尝试在GCP中运行此操作时,没有抛出任何错误,但我无法使用公共IP访问。

当我本地运行时,它运行良好。

我使用以下命令

运行Docker
docker run     -v /var/run/docker.sock:/var/run/docker.sock     -v "$PWD:$PWD"     -w="$PWD"   docker/compose:1.23.2 up

我尝试设置端口也喜欢:

docker run     -v /var/run/docker.sock:/var/run/docker.sock     -v "$PWD:$PWD"     -w="$PWD"  -p 8080:3000   docker/compose:1.23.2 up

找不到问题所在。请指教..预先感谢。

在我看来就像防火墙问题。

当您的应用程序使用端口3000和5000时,您遵循的示例会听到端口80上的连接。GCP带有一组默认的防火墙规则,其中可以访问某些标准协议(例如HTTP)的端口,但是您需要创建一个新的防火墙以允许应用程序的相关端口访问。

查看有关为特定端口创建防火墙规则的答案。

最新更新