簡體   English   中英

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

[英]Docker, MySQL - command not found in .sh file

我對 Docker 比較陌生。 我剛剛設置了一個Dockerfile和一個docker-compose.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

我不斷收到錯誤消息./config/scripts/migrate_local.sh: line 25: mysql: command not found這是這一行mysql -h$DB_HOST -u$DB_USER -p$DB_PASS $DB_NAME < $filename

有誰知道如何解決這一問題? 這是DockerfileDockerfile docker-compose.yml ,我使用sudo docker-compose up --build docker-compose.yml sudo docker-compose up --build來運行。

文件

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
COPY . /usr/src

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

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" ]

需要在運行Docker容器的機器上安裝mysql。 也就是說,只需在您的計算機上安裝 mysql:

sudo apt-get update && sudo apt-get install mysql-server

這是因為您的 bash 腳本在您的計算機上運行,​​而不是在 Docker 容器中運行,因此,它需要知道“mysql”命令。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM