繁体   English   中英

每次启动时如何将 Bash 脚本执行到 mysql docker 容器中

[英]How to execute a Bash script into a mysql docker container every time it starts

我需要在每次启动时执行这些命令,因为每次设置并重新启动它时它看起来都会被覆盖

mysql -uroot -padmin;
set global general_log = 1;

我仅出于开发目的使用 docker-compose 启动 docker 容器,它看起来像这样。

version: "3.8"
services:
  mysql_service:
    container_name: db_container
    build:
        context: .
        dockerfile: ./db/Dockerfile.dev
    # needed for mysql 8+
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    hostname: db
    ports:
      - target: 3306
        published: 3306
        protocol: tcp
        mode: host
    environment:
      - MYSQL_ROOT_PASSWORD=admin
      - MYSQL_DATABASE=example
      - MYSQL_ROOT_HOST=localhost
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    volumes:
      - ./db/:/docker-entrypoint-initdb.d/
      - data_volume:/var/lib/mysql/
    cap_add:
      - ALL
      
volumes:
  data_volume:
    driver: local

和 Dockerfile

FROM mysql:8.0

COPY ./DevOps/Docker/db/set_logging.sh /usr/local/bin
ENTRYPOINT ["docker-entrypoint.sh", "./usr/local/bin/set_logging.sh"]

然而,副本通过,但脚本从未执行。 脚本的样子

#!/bin/bash
mysql -uroot -padmin -e "set global general_log = 1"

关于通过 go 获取此命令的任何建议? 这只是为了开发

为了告诉 MYSQL 容器在启动后运行该脚本,您可以使用 docker 文件或 docker-compose 文件将脚本安装到映像的/docker-entrypoint-initdb.d文件夹中。

Dockerfile

FROM mysql:8.0
COPY ./DevOps/Docker/db/script.sh /docker-entrypoint-initdb.d/script.sh
ENTRYPOINT ["docker-entrypoint.sh"]

docker-compose

version: "3.8"
services:
  mysql_service:
    container_name: db_container
    build:
        context: .
        dockerfile: ./db/Dockerfile.dev
    # needed for mysql 8+
    command: --default-authentication-plugin=mysql_native_password
    restart: always
    hostname: db
    ports:
      - target: 3306
        published: 3306
        protocol: tcp
        mode: host
    environment:
      - MYSQL_ROOT_PASSWORD=admin
      - MYSQL_DATABASE=example
      - MYSQL_ROOT_HOST=localhost
      - MYSQL_ALLOW_EMPTY_PASSWORD=yes
    volumes:
      - "./DevOps/Docker/db/script.sh:/docker-entrypoint-initdb.d/script.sh"  
      - data_volume:/var/lib/mysql/
    cap_add:
      - ALL
      
volumes:
  data_volume:
    driver: local

您可以检查脚本是如何在/docker-entrypoint-initdb.d中启动的,请阅读初始化新实例部分

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM