簡體   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