簡體   English   中英

從bash腳本運行“ mysql”命令

[英]Run “mysql” command from bash script

我有一個MariaDB Docker容器,我想借助bash腳本自動訪問。

我正在使用Docker compose:

version: '3'
services:
  drupal:
    image: jonasvbogaert/php-docker:${IMAGE_VERSION}
    container_name: drupalenv
    ports:
      - 8080:80
    volumes:
      - /var/www/html/
    restart: always
    environment:
      DRUPAL_SITE_NAME: Drupal
      DRUPAL_USER: admin
      DRUPAL_PASS: admin
  mariadb:
    image: mariadb:latest
    container_name: mariadbenv
    restart: always
    ports:
      - 3036:3036
    depends_on:
      - drupal
    environment:
      MYSQL_ROOT_PASSWORD: ""
      MYSQL_ALLOW_EMPTY_PASSWORD: 'yes'
      MYSQL_USER: drupal
      MYSQL_PASSWORD: drupal
      MYSQL_DATABASE: drupal`

第一個命令是潛入容器中(工作正常):

docker exec -it mariadbenv bash

但是第二個:

mysql

輸出以下錯誤:

ERROR 1045 (28000): Access denied for user 'jonasvb'@'localhost' (using password: NO) the input device is not a TTY

當我自己輸入“ mysql”時,它可以工作。

這是我使用的腳本:

function main () {
  getUserInput
}


function fireDocker () {
  if [ $DRUPAL_VERSION = "7" ]; then                            
    IMAGE_VERSION="drupal7"                                     
    export IMAGE_VERSION                                        
    docker-compose up -d                                         
    mountDump
  else
    IMAGE_VERSION="drupal8"                                     
    export IMAGE_VERSION                                        
    docker-compose up -d                                        
    mountDump
  fi
}

function getUserInput () {
  echo "Enter Drupal version (7 or 8)"
  read DRUPAL_VERSION                                           # Read 
  fireDocker $DRUPAL_VERSION
}

function mountDump(){
  docker exec -it mariadbenv bash
  mysql

}


main

編輯

當我執行不帶-t標志的第一個命令時。 我有這個: 在此處輸入圖片說明

它保持這樣。

您可以使用以下命令在容器中運行mysql命令

docker exec -i some_mysql_container mysql --user=root --password=root  <<< "select database();"

此處的密碼和用戶名應與容器中使用的密碼和用戶名匹配。

在您的情況下,更好的方法是將所有轉儲都放置在主機中,然后將該主機目錄映射到容器中位於/docker-entrypoint-initdb.d容器中。 為了更好地了解所有轉儲如何導入到容器中,您可以查看mariadb:latest的官方entrypoint.sh

L170起:

    for f in /docker-entrypoint-initdb.d/*; do
        case "$f" in
            *.sh)     echo "$0: running $f"; . "$f" ;;
            *.sql)    echo "$0: running $f"; "${mysql[@]}" < "$f"; echo ;;
            *.sql.gz) echo "$0: running $f"; gunzip -c "$f" | "${mysql[@]}"; echo ;;
            *)        echo "$0: ignoring $f" ;;
        esac
        echo
    done

這使用戶可以將所有內容放置在/docker-entrypoint-initdb.d/ ,然后

  • 從那里運行bash腳本
  • 運行SQL腳本
  • 恢復存檔的數據庫

暫無
暫無

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

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