首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何解决对接组合找不到模块“/dockerize”的问题

如何解决对接组合找不到模块“/dockerize”的问题
EN

Stack Overflow用户
提问于 2021-08-09 13:34:38
回答 1查看 143关注 0票数 0

我有一个对接-组成设置与三个容器- mysql db,无服务器应用程序和测试(测试无服务器应用程序与摩卡)。在执行与坞-合成向上-构建,它似乎是执行顺序混乱,而不是按照正确的顺序。mysql和无服务器应用程序都需要处于工作状态才能正常运行(depends_on几乎不起作用)。

因此,在启动测试容器之前,我尝试使用dockerize模块设置超时,并在3306和4200上侦听tcp端口。但我说Cannot find module '/dockerize'时出错了。

设置我的docker-compose.yml和Dockerfile的方式有什么问题吗?我对码头很陌生,所以欢迎任何帮助。

Dockerfile.yml

代码语言:javascript
复制
FROM node:12

# Create app directory
RUN mkdir -p /app
WORKDIR /app

# Dockerize is needed to sync containers startup
ENV DOCKERIZE_VERSION v0.6.0
RUN wget --no-check-certificate https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    && tar -C /usr/local/bin -xzvf dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
    && rm dockerize-alpine-linux-amd64-$DOCKERIZE_VERSION.tar.gz

# Install app dependencies
COPY package.json /app/
COPY package-lock.json /app/
RUN npm install -g serverless@2.41.2
RUN npm install

# Bundle app source
COPY . /app

docker-compose.yml

代码语言:javascript
复制
version: '3'
services:
  mysql-coredb:
    image: mysql:5.6
    container_name: mysql-coredb
    expose: 
      - "3306"
    ports:
      - "3306:3306"

  serverless-app:
    build: .
    image: serverless-app
    container_name: serverless-app
    depends_on:
      - mysql-coredb
    command: sls offline --stage local --host 0.0.0.0
    expose: 
      - "4200"
    ports:
      - "4200:4200"
    links:
      - mysql-coredb
    volumes:
      - /app/node_modules
      - .:/app

  test:
    image: node:12
    working_dir: /app
    container_name: test
    volumes:
      - /app/node_modules
      - .:/app
    command: dockerize
        -wait tcp://serverless-app:4200 -wait tcp://mysql-coredb:3306 -timeout 15s
        bash -c "npm test"
    depends_on:
      - mysql-coredb
      - serverless-app
    links:
      - serverless-app
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-09 14:01:51

最后一个test容器正在运行一个裸露的node映像。这不会看到或使用您在Dockerfile中安装的任何软件包。您可以将该容器设置为build: .;Compose将第二次在构建序列中运行,但是由于所有输入都与主serverless-app容器相同,所以Docker将对所有内容使用构建缓存,构建将非常快地运行,您将对相同的物理映像有两个名称。

您还可以安全地删除Dockerfile中的大多数选项。您只需要在计划将图像推送到注册表时使用build:指定build:;不需要覆盖container_name:;默认的command:应该来自Dockerfile CMDexpose:links:与第一代Docker网络相关,并且没有必要;用volumes:覆盖图像代码会导致完全忽略图像内容并获得特定主机的行为(仅在主机上使用Node将比试图说服Docker像本地Node开发环境的行为容易得多)。所以我会把这个剪短到:

代码语言:javascript
复制
version: '3.8'
services:
  mysql-coredb:
    image: mysql:5.6
    ports:
      - "3306:3306"

  serverless-app:
    build: .
    depends_on:
      - mysql-coredb
    ports:
      - "4200:4200"

  test:
    build: .
    command: >-
      dockerize
      -wait tcp://serverless-app:4200
      -wait tcp://mysql-coredb:3306
      -timeout 15s
      npm test
    depends_on:
      - mysql-coredb
      - serverless-app
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68712989

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档