我有一个对接-组成设置与三个容器- mysql db,无服务器应用程序和测试(测试无服务器应用程序与摩卡)。在执行与坞-合成向上-构建,它似乎是执行顺序混乱,而不是按照正确的顺序。mysql和无服务器应用程序都需要处于工作状态才能正常运行(depends_on几乎不起作用)。
因此,在启动测试容器之前,我尝试使用dockerize模块设置超时,并在3306和4200上侦听tcp端口。但我说Cannot find module '/dockerize'时出错了。
设置我的docker-compose.yml和Dockerfile的方式有什么问题吗?我对码头很陌生,所以欢迎任何帮助。
Dockerfile.yml
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 . /appdocker-compose.yml
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发布于 2021-08-09 14:01:51
最后一个test容器正在运行一个裸露的node映像。这不会看到或使用您在Dockerfile中安装的任何软件包。您可以将该容器设置为build: .;Compose将第二次在构建序列中运行,但是由于所有输入都与主serverless-app容器相同,所以Docker将对所有内容使用构建缓存,构建将非常快地运行,您将对相同的物理映像有两个名称。
您还可以安全地删除Dockerfile中的大多数选项。您只需要在计划将图像推送到注册表时使用build:指定build:;不需要覆盖container_name:;默认的command:应该来自Dockerfile CMD;expose:和links:与第一代Docker网络相关,并且没有必要;用volumes:覆盖图像代码会导致完全忽略图像内容并获得特定主机的行为(仅在主机上使用Node将比试图说服Docker像本地Node开发环境的行为容易得多)。所以我会把这个剪短到:
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-apphttps://stackoverflow.com/questions/68712989
复制相似问题