Docker-compose依赖性似乎不起作用

克雷格

我正在尝试自动在Docker容器中安装Drupal网站。

这是我的docker-compose文件:

version: '2'
services:

  mariadb:
    image: mariadb
    environment:
       MYSQL_DATABASE: drupal8
       MYSQL_USER: drupal8
       MYSQL_PASSWORD: drupal8
       MYSQL_ROOT_PASSWORD: drupal8
    restart: always

  drupal:
    image: drupal
    build:
      drupal_init
    ports:
      - 8888:80
    depends_on:
      - mariadb

这是我在drupal_init中的Dockerfile:

FROM drupal

RUN apt-get update -y && apt-get install -y wget vim git mysql-client

RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');" && \
    php composer-setup.php && \
    mv composer.phar /usr/local/bin/composer && \
    php -r "unlink('composer-setup.php');"


RUN wget -O drush.phar https://github.com/drush-ops/drush-launcher/releases/download/0.4.2/drush.phar && \
    chmod +x drush.phar && \
    mv drush.phar /usr/local/bin/drush

RUN rm -rf /var/www/html/*
RUN mkdir -p /var/www/html/web
RUN composer -vvv create-project drupal-composer/drupal-project /var/www/html/web --stability dev --no-interaction

RUN drush si -y \
  --db-url=mysql://root:drupal8@mariadb/drupal8 \
  --site-name=drupal8 \
  [email protected] \
  [email protected] \
  --account-name=drupal8 \
  --account-pass=drupal8

一切正常,直到我了解drush创建数据库表命令。我遇到了错误

[error]  Failed to create database: ERROR 2005 (HY000): Unknown MySQL server host 'mariadb' (-2)  

但是-如果我注释掉RUN drush...Dockerfile一部分,则容器的创建确实成功(显然没有创建表)。然后docker exec -it <containerID> bash我可以发出,进入容器并成功发出相同的命令。

$ docker exec -it d16e bash
root@d16e4ff4dda6:/var/www/html/web# drush si -y \
>   --db-url=mysql://root:drupal8@mariadb/drupal8 \
>   --site-name=drupal8 \
>   [email protected] \
>   [email protected] \
>   --account-name=drupal8 \
>   --account-pass=drupal8

 // You are about to DROP all tables in your 'drupal8' database. Do you want to continue?: yes.                         

 [notice] Starting Drupal installation. This takes a while.
 [success] Installation complete.

那么为什么会这样呢?在我的drupal服务启动时,mariadb服务似乎未处于活动状态。不过,在我的docker-compose文件中,我有drupal服务depends_onmariadb服务,因此mariadb是否可用于drupal?

从理论上讲,我可以将其拆分为两个不同的Docker文件,然后通过shell脚本将它们旋转起来,但这将无法实现使用docker-compose方法的目的。关于docker-compose我做错了什么的任何线索?

您的drupal容器mariadb在构建期间容器一无所知只有在您运行docker-compose updrupalmariadb集装箱将可为对方在同一个网络上。

您需要做的是使用drush启动容器后运行docker-compose up您可以bash用来完成该任务。例如,创建start.bash文件并放入:

#!/usr/bin/env bash
docker-compose up -d
# You might need to put some delay here: sleep 5
docker exec -it <your-drupal-container> drush si -y \
   --db-url=mysql://root:drupal8@mariadb/drupal8 \
   --site-name=drupal8 \
   [email protected] \
   [email protected] \
   --account-name=drupal8 \
   --account-pass=drupal8

更新:您可能还面临的问题是启动数据库实例需要一些时间。因此,即使您在运行drush后立即运行该命令,docker-compose up它仍然可能会失败。为了解决这个问题,您可以使用Docker Compose healthcheck或在运行drush命令之前简单地进行显式等待(请参见上面的示例)。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Docker撰写链接似乎不起作用

Docker端口绑定似乎不起作用

docker-compose-更改docker hub值不起作用?

/ dev / null在docker容器中似乎不起作用

Maven-对Checkstyle模块的依赖性不起作用

SQL依赖性跟踪不起作用

将Xamarin更新到最新版本,并且文件依赖性似乎不起作用?

Docker Compose主机名命令不起作用

docker-compose mongodb新鲜实例不起作用

docker-compose设置环境变量不起作用

带有 docker-compose 的 AdminMongo 不起作用

Docker-compose与MySql的容器连接不起作用

docker-compose集成在pycharm中不起作用

使用 docker compose up 的本地主机不起作用

Docker-compose容器端口不起作用

Traefik 的“使用 docker-compose 的基本示例”不起作用

Docker Compose 绑定挂载在 GitHub 操作中不起作用

Docker Compose 和 Xdebug 在 PhpStorm 中不起作用

POST 请求在 docker-compose 容器中不起作用

Docker Compose OpenJDK - 卷映射不起作用

docker-compose 在特定目录下不起作用

docker compose rails 6 示例与 mailcatcher 不起作用

移动docker-compose.yml文件时,Nginx图像的docker-compose不起作用

当我有“体积”时,Docker Compose不起作用,否则它将起作用。为什么?

Docker Compose Bash命令在YAML中不起作用,但在容器中起作用

容器在使用Dockerfile时起作用,但在使用docker-compose.yml时不起作用

当 docker-compose 中有命令时,nginx docker alpine envsubst 不起作用

使用 docker-compose 运行 nodejs 不起作用,但使用 docker run 命令

Maven资源过滤不起作用-由于Spring Boot依赖性