在完成MySQL导入后在链接的容器上执行shellscript

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在完成MySQL导入后在链接的容器上执行shellscript相关的知识,希望对你有一定的参考价值。

在我的Dockerfile中,我使用这两行在入口文件夹中复制3个mysql转储并执行shellscript:

ADD dumps /docker-entrypoint-initdb.d/
COPY echo.sh /docker-entrypoint-initdb.d/9echo.sh

这很好,但是我正在寻找一种方法来在链接的php容器中调用shellscript

version: '3.5'

services:
  db:
    build: mysql
    environment:
      MYSQL_ROOT_PASSWORD: app
      MYSQL_USER: app
      MYSQL_PASSWORD: app
      MYSQL_DATABASE: app
    expose:
      - 3360
    networks:
      - traefik_traefik
    restart: $RESTART
  php73:
    build:
      context: ./php
      args:
        feature_tag: $CONTAINER_PREFIX
    links:
      - db
    depends_on:
      - db
    networks:
      - traefik_traefik
    labels:
      - "traefik.http.routers.$CONTAINER_PREFIX_php73.rule=Host($URLS)"
      - "traefik.http.middlewares.thisauth.basicauth.users=swiss:$$apr1$$nb9MT1Rk$$swy9fdsfcz8YFXYdzwBwR1"
      - "traefik.http.routers.$CONTAINER_PREFIX_php73.middlewares=thisauth@docker"

因为只有在数据库完全加载了所需数据后才能调用此脚本。否则,PHP代码将无法正常工作。

是否可以在docker-compose或Dockerfile中使用初始化脚本调用之后?

答案

我不确定这是您的意思,但是如果您要调用shell脚本,DB和php启动后,您可以像这样更改docker-compose.yml:

  php73:
    build:
      context: ./php
      args:
        feature_tag: $CONTAINER_PREFIX
    links:
      - db
    depends_on:
      - db
    networks:
      - traefik_traefik
    labels:
      - "traefik.http.routers.$CONTAINER_PREFIX_php73.rule=Host($URLS)"
      - "traefik.http.middlewares.thisauth.basicauth.users=swiss:$$apr1$$nb9MT1Rk$$swy9fdsfcz8YFXYdzwBwR1"
      - "traefik.http.routers.$CONTAINER_PREFIX_php73.middlewares=thisauth@docker"
    command: sh -c ' bash script.sh'

以上是关于在完成MySQL导入后在链接的容器上执行shellscript的主要内容,如果未能解决你的问题,请参考以下文章

如何在mysql shell命令中执行sql命令行

docker进入式 执行sh

图像加载后在 Knockout.js 中淡入容器元素

hadoop 链接 mysql

shell 在脚本中执行了source /etc/profile 不生效

dockerphp导入文件到数据库