使用docker-compose的PHP-FPM不会在Docker上启动

我在这里有一个非常奇怪的问题,我不知道我做错了什么,一定是简单的东西,但我无法弄清楚。

我的docker-compose.yml:

mysql: image: mysql:5.7 container_name: mysql environment: - MYSQL_ROOT_PASSWORD=aaa - MYSQL_DATABASE=aaa - MYSQL_USER=aaa - MYSQL_PASSWORD=aaa - MYSQL_PORT=3306 - MYSQL_HOST=localhost php-fpm: build: . dockerfile: php-fpm/Dockerfile container_name: php-fpm volumes: - ../app:/var/www/html links: - mysql environment: PHP_php5enmod: 'bcmath gd gmp intl mbstring mysql mysqli pcntl pdo_mysql redis zip sockets' caddy: build: . dockerfile: caddy/Dockerfile container_name: caddy volumes: - ../app:/var/www/html - ./caddy/Caddyfile:/etc/Caddyfile - ./caddy/certs:/root/.caddy ports: - "80:80" - "443:443" links: - mysql - php-fpm 

用于php-fpm的Dockerfile:

 FROM alterway/php:7.1-fpm # update RUN apt-get update && apt-get install -y bash zip unzip # require the asset plugin RUN composer global require "fxp/composer-asset-plugin:^1.3.1" # copy the entrypoint COPY ./php-fpm/docker-entrypoint.sh /root/docker-entrypoint.sh # setup permissions RUN chmod +x /root/docker-entrypoint.sh # Clean up, try to reduce image size (much as you can on Debian..) RUN apt-get autoremove -y \ && apt-get clean all \ && rm -rf /var/lib/apt/lists/* \ && rm -rf /usr/share/doc /usr/share/man /usr/share/locale ENTRYPOINT ["/root/docker-entrypoint.sh"] 

(如果我注释掉ENTRYPOINT容器启动就好了)

而在我的docker-entrypoint.sh文件中,我只是试图运行一个迁移:

 #!/bin/bash # run the migration /var/www/html/yii migrate/up --interactive=0 --migrationPath=/var/www/html/vendor/twisted1919/yii2-options/migrations 

所以我想要做的是在容器启动后立即运行一个shell脚本,但似乎没有任何工作。

另一件事,如果我注释掉我的Dockerfile中的ENTRYPOINT,当容器启动并执行数据库迁移时,它抱怨它找不到有效的mysql驱动程序,但是如果我login容器并尝试手动运行迁移,那么它工作得很好,所以也许有些东西是错误的,使用的alterway/docker-php

我认为增加健康检查可能会帮助你。

这样你可以告诉docker-compose在启动php-fpm之前等待mysql健康

好的,所以这个问题的确是事实上,mysql并没有准备好连接。 我没有去健康检查的事情,我只是简单地将所有的脚本包装在一个shell脚本中,以启动/停止/重新启动docker-compose,并且在容器中调用我需要的脚本,这样做更容易。