我在这里遇到一个非常奇怪的问题,我不确定我做错了什么,一定是简单但我无法弄明白。
我的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驱动程序,但如果我登录容器并尝试运行迁移手动,然后它工作得很好,所以可能有问题alterway/docker-php
答案 0 :(得分:0)
我认为添加health check可能会帮助您。
这样你可以告诉docker-compose
在启动php-fpm之前等待mysql健康
答案 1 :(得分:0)
好的,所以问题确实是mysql还没有为连接做好准备。我没有去做健康检查的事情,我只是用shell脚本包装来启动/停止/重启docker-compose,并且还调用容器内部需要的脚本,这样就更容易了。