[英]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
編輯
它保持這樣。
您可以使用以下命令在容器中運行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/
,然后
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.