从bash脚本运行“mysql”命令

我有一个MariaDB Docker容器,我想在bash脚本的帮助下自动访问。

我正在使用Docker撰写:

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

当我自己input“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的官方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脚本
  • 恢复存档的数据库