Docker,MySQL-在.sh文件中找不到命令

Docker,MySQL-在.sh文件中找不到命令,mysql,node.js,docker,docker-compose,Mysql,Node.js,Docker,Docker Compose,我对Docker还比较陌生。我刚刚设置了一个Dockerfile和一个dockercompose.yml。由于某些原因,docker无法运行此脚本。每当运行此脚本时,它都会遍历所有SQL文件并迁移该文件 #!/bin/bash DB_NAME="database_name" DB_USER="username" DB_PASS="password" DB_HOST="localhost" #get current version GET_DATABASE_VERSION="SELECT na

我对Docker还比较陌生。我刚刚设置了一个
Dockerfile
和一个
dockercompose.yml
。由于某些原因,docker无法运行此脚本。每当运行此脚本时,它都会遍历所有SQL文件并迁移该文件

#!/bin/bash

DB_NAME="database_name"
DB_USER="username"
DB_PASS="password"
DB_HOST="localhost"

#get current version
GET_DATABASE_VERSION="SELECT name FROM version TOP 1"
#

echo "Getting data version"
version=$(mysql -h$DB_HOST -u$DB_USER -p$DB_PASS $DB_NAME -e "SELECT name FROM version")
#trim string to get current version name
version=${version:5}
x="./config/scripts/migration/$version"
echo $version
MIGRATION_PATH="./config/scripts/migration/*"
#get migration file for newer version
for filename in $MIGRATION_PATH -maxdepth 2
do
    if [[ -f $filename ]]; then
        if [[ "$filename" > "$x" ]] || [ "$filename" == "$x" ]; then
            echo "Running migration file: $filename"
            mysql -h$DB_HOST -u$DB_USER -p$DB_PASS $DB_NAME < $filename
        fi
    fi
done
docker compose.yml

version: "2"
services:
  universe:
    build: .
    working_dir: /usr/src
    environment:
    - NODE_ENV=default
    - PORT=3000
    volumes:
    - /usr/src
    ports:
    - "3000:3000"
    - "8000:8000"
    links:
    - redis
    - mysql

  redis:
    image: redis
    volumes:
    - /data/redis:/data

  mysql:
    image: mysql:5.7
    environment:
      MYSQL_ROOT_PASSWORD: "root"
      MYSQL_DATABASE: "database_name"
      MYSQL_USER: "username"
      MYSQL_PASSWORD: "password"
    volumes:
    - /data/mysql:/var/lib/mysql
更新 我使用
winston
作为我的记录器,但是,它根本不工作,
console.log
工作正常。这可能是错误:

universe_1  |   errno: 'ECONNREFUSED',
universe_1  |   code: 'ECONNREFUSED',
universe_1  |   syscall: 'connect',
universe_1  |   address: '127.0.0.1',
universe_1  |   port: 3307,
universe_1  |   fatal: true 

您的
universe
映像未安装
mysql
命令行工具。您必须在构建docker映像时安装它

请尝试以下Dockerfile:

FROM node:8
MAINTAINER Tri Nguyen "me@mydomain.com"

RUN mkdir -p /usr/src
WORKDIR /usr/src

COPY package.json /usr/src
RUN npm install
RUN npm rebuild node-sass --force
RUN set -ex; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
    mysql-client

COPY . /usr/src

EXPOSE 3000 8000
CMD [ "npm", "start" ]

这个脚本在哪里运行?在你的
universe
image上?@EmruzHossain是的,这是
chmod+x./config/scripts/dbsetup\u local.sh&./config/scripts/dbsetup\u local.sh在
universe
镜像中运行的脚本。我更新了我的发现,这可能是错误,谢谢。它解决了上述问题,但出现了错误2002(HY000):无法通过套接字'/var/run/mysqld/mysqld.sock'(2)
尝试使用
DB_HOST=“127.0.0.1”
而不是
DB_HOST=“localhost”
。Ref:2003年我遇到
错误(HY000):无法连接到'127.0.0.1'(111)
上的MySQL服务器。我认为
localhost
是正确的,它具有
/var/run/mysqld/mysqld.sock的权限。你能从本地机器访问mysql数据库吗?是的,它运行得非常好
FROM node:8
MAINTAINER Tri Nguyen "me@mydomain.com"

RUN mkdir -p /usr/src
WORKDIR /usr/src

COPY package.json /usr/src
RUN npm install
RUN npm rebuild node-sass --force
RUN set -ex; \
    apt-get update; \
    apt-get install -y --no-install-recommends \
    mysql-client

COPY . /usr/src

EXPOSE 3000 8000
CMD [ "npm", "start" ]