从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脚本
- 恢复存档的数据库