Node.js Docker compose-无法连接到mysql-mysql之前的应用程序构建?
我有一个docker compose文件旋转了3个应用程序。mysql,phpmyadmin&一个nodejs应用程序。您将在下面找到撰写文件Node.js Docker compose-无法连接到mysql-mysql之前的应用程序构建?,node.js,docker,docker-compose,Node.js,Docker,Docker Compose,我有一个docker compose文件旋转了3个应用程序。mysql,phpmyadmin&一个nodejs应用程序。您将在下面找到撰写文件 nodejs应用程序具有sequilizeJS,需要在初始化时运行migration&seed命令 当我运行docker compose up--build时,构建失败,因为mysql返回时出现错误getaddrinfo ENOTFOUND mysql 我无法找出我在撰写文件中做错了什么,因为它看起来对我来说没有问题 phpmyadmin和auth应用程
getaddrinfo ENOTFOUND mysql
phpmyadmin
和auth
应用程序都需要mysql
,因此我将mysql
添加到依赖部分。从日志文件中可以看出,composer在创建mysql
之前尝试构建auth
日志
Dockerfile
docker-compose.yml
Dockerfile
永远无法访问docker compose.yml
中声明的数据库、卷或其他资源(在该服务的即时生成:
块之外)。构建作为一个单独的阶段运行;它不会连接到Compose网络
(想象一下在一个系统上运行docker build;docker push
,在另一个系统上指定匹配的image:
。在这个设置中,构建时系统无法访问运行时数据库,这是您应该考虑的基本模型。更直接地说,您可以删除并重新创建mysql
容器,而无需重建auth
图像。)
执行此操作的典型模式是编写入口点脚本。这将成为容器运行的主命令;它将通过DockerfileCMD
(或Docker Compose命令:
)作为命令行参数。由于它在容器启动时运行,因此它确实可以访问数据库、网络、环境变量等
!/bin/sh
设置-e#在出现任何错误时停止
npm运行迁移#运行迁移
npm运行种子#预加载初始数据
exec“$@”#将该命令作为主容器进程运行
在Dockerfile
中,将此脚本作为ENTRYPOINT
。您必须在此处使用ENTRYPOINT
的JSON数组形式
来自节点:12.14.0
WORKDIR/var/www
#首先安装依赖项以节省重建时间
复制package.json。
运行npm安装
复制
曝光3001
如果需要,运行chmod+x entrypoint.sh
入口点[“/”入口点.sh“]
CMD[“npm”,“开始”]
Dockerfile
永远无法访问docker compose.yml
中声明的数据库、卷或其他资源(在该服务的即时构建:
块之外)。构建作为单独的阶段运行;它不会连接到compose网络
(想象一下在一个系统上运行docker build;docker push
,在另一个系统上指定匹配的image:
。在这个设置中,构建时系统无法访问运行时数据库,这是您应该考虑的基本模型。更直接地说,您可以删除并重新创建mysql
容器,而无需重建auth
图像。)
执行此操作的典型模式是编写入口点脚本。这将成为容器运行的主命令;它将通过DockerfileCMD
(或Docker Compose命令:
)作为命令行参数。由于它在容器启动时运行,因此它确实可以访问数据库、网络、环境变量等
!/bin/sh
设置-e#在出现任何错误时停止
npm运行迁移#运行迁移
npm运行种子#预加载初始数据
exec“$@”#将该命令作为主容器进程运行
在Dockerfile
中,将此脚本作为ENTRYPOINT
。您必须在此处使用ENTRYPOINT
的JSON数组形式
来自节点:12.14.0
WORKDIR/var/www
#首先安装依赖项以节省重建时间
复制package.json。
运行npm安装
复制
曝光3001
如果需要,运行chmod+x entrypoint.sh
入口点[“/”入口点.sh“]
CMD[“npm”,“开始”]
有道理!谢谢!有道理!谢谢!
Creating network "updials-auth_default" with the default driver
Building auth
Step 1/8 : FROM node:12.14.0
---> 6b5991bf650f
Step 2/8 : WORKDIR /var/www
---> Using cache
---> 21c89e8b8059
Step 3/8 : COPY . .
---> 73072a4bddb5
Step 4/8 : COPY package.json /usr/share/app
---> 886992b71802
Step 5/8 : EXPOSE 3001
---> Running in cd7c14183427
Removing intermediate container cd7c14183427
---> b93bcdf8c653
Step 6/8 : RUN npm install
---> Running in 4b6d75b77bab
npm WARN deprecated mkdirp@0.5.1: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
npm WARN deprecated request@2.88.2: request has been deprecated, see https://github.com/request/request/issues/3142
npm WARN rm not removing /var/www/node_modules/.bin/rimraf as it wasn't installed by /var/www/node_modules/rimraf
> bcrypt@3.0.8 install /var/www/node_modules/bcrypt
> node-pre-gyp install --fallback-to-build
node-pre-gyp WARN Using request for node-pre-gyp https download
[bcrypt] Success: "/var/www/node_modules/bcrypt/lib/binding/bcrypt_lib.node" is installed via remote
> ejs@2.7.4 postinstall /var/www/node_modules/ejs
> node ./postinstall.js
Thank you for installing EJS: built with the Jake JavaScript build tool (https://jakejs.com/)
npm notice created a lockfile as package-lock.json. You should commit this file.
added 18 packages from 3 contributors, removed 9 packages, updated 467 packages and audited 1563 packages in 51.173s
22 packages are looking for funding
run `npm fund` for details
found 5 low severity vulnerabilities
run `npm audit fix` to fix them, or `npm audit` for details
Removing intermediate container 4b6d75b77bab
---> f3c15392ccc2
Step 7/8 : RUN npm run migrate && npm run seed
---> Running in cd58f889c907
> updials-auth@0.0.2 migrate /var/www
> npx sequelize-cli db:migrate
npx: installed 81 in 8.76s
Sequelize CLI [Node: 12.14.0, CLI: 5.5.1, ORM: 5.21.5]
Loaded configuration file "config/config.js".
Using environment "development".
ERROR: getaddrinfo ENOTFOUND mysql
npm ERR! code ELIFECYCLE
npm ERR! errno 1
npm ERR! updials-auth@0.0.2 migrate: `npx sequelize-cli db:migrate`
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the updials-auth@0.0.2 migrate script.
npm ERR! This is probably not a problem with npm. There is likely additional logging output above.
npm ERR! A complete log of this run can be found in:
npm ERR! /root/.npm/_logs/2020-03-29T15_36_20_888Z-debug.log
ERROR: Service 'auth' failed to build: The command '/bin/sh -c npm run migrate && npm run seed' returned a non-zero code: 1
FROM node:12.14.0
#USER node
WORKDIR /var/www
COPY . .
COPY package.json /usr/share/app
#COPY package.lock.json /usr/share/app
EXPOSE 3001
RUN npm install
RUN npm run migrate && npm run seed
CMD ["npm", "start"]
version: '3.7'
services:
mysql:
container_name: updials-auth-mysql
image: mysql:5.7
environment:
MYSQL_ROOT_PASSWORD: 'password'
MYSQL_DATABASE: 'updials'
MYSQL_USER: 'updials'
MYSQL_PASSWORD: 'password'
volumes:
- database:/var/lib/mysql
auth:
container_name: updials-auth
restart: always
depends_on:
- mysql
build: .
ports:
- '3001:5002'
environment:
DB_HOST: 'mysql'
DB_USER: 'updials'
DB_PASS: 'password'
DB_NAME: 'updials'
phpmyadmin:
container_name: phpmyadmin-updials-auth
restart: always
image: phpmyadmin/phpmyadmin:5.0.2
depends_on:
- mysql
environment:
MYSQL_USER: updials
MYSQL_PASSWORD: password
ports:
- '4000:8080'
volumes:
database:
driver: local
driver_opts:
type: 'none'
o: 'bind'
device: '/home/sisir/docker-databases/updials-auth'