我正在travisci上实现自动化测试。下面是 docker-compose.yml
以及 .travis.yml
文件夹。
特拉维斯·伊梅尔
dist: trusty
language: php
sudo: required
group: edge
php:
- '5.6'
- '7.1'
services:
- docker
- mysql
git:
quiet: true
before_install:
- sudo chmod +x docker-compose.yml
before_script:
script:
- docker-compose up -d
- docker exec -i travistest_db_1 mysql -uwordpress -pwordpress wordpress < wordpress.sql
docker-compose.yml公司
version: '3.3'
services:
db:
image: mysql:5.7
volumes:
- ~/db_data:/var/lib/mysql
restart: always
environment:
MYSQL_ROOT_PASSWORD: wordpress
MYSQL_DATABASE: wordpress
MYSQL_USER: wordpress
MYSQL_PASSWORD: wordpress
wordpress:
image: wordpress:latest
volumes:
- ~/wordpress_data:/var/www/html
depends_on:
- db
ports:
- "8004:80"
restart: always
environment:
WORDPRESS_DB_HOST: db:3306
WORDPRESS_DB_USER: wordpress
WORDPRESS_DB_PASSWORD: wordpress
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
environment:
MYSQL_USER: root
MYSQL_ROOT_PASSWORD: wordpress
ports:
- "8011:80"
volumes:
db_data:
当我尝试启动sql查询时,它会抛出以下错误: mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) read unix @->/var/run/docker.sock: read: connection reset by peer
我已经试着调试了几个小时,但还没有运气,有没有人曾经面对这个问题,并设法解决这个问题?
是否有其他方法可以导入sql文件?
1条答案
按热度按时间yws3nbqq1#
发生这种情况的原因是,在执行以下命令时,mysql数据库尚未初始化:
正在运行。您需要临时执行此命令,有很多方法可以做到这一点:
等到
[Note] mysqld: ready for connections.
出现在travistest_db_1
日志等待以下命令:
返回一个
0
退出状态(表示端口3306打开并允许连接)在你的房间里做个健康检查
docker-compose.yml
为您的db
服务(您可以根据需要配置参数):等到:
退货
healthy
. 这个cat /proc/net/tcp /proc/net/tcp6 | grep ':0CEA'
healthcheck中使用的命令返回0
if端口:0CEA
(:3306
以十六进制表示)绑定到ipv4或ipv6(意味着mysql已准备好接受连接)。因为没有像curl
或者wget
在mysql:5.7
这似乎是检查端口是否打开的唯一命令无论您选择什么解决方案,都必须在
docker-compose up
以及docker exec
对于繁忙的等待,就像下面的第三个解决方案一样healthcheck
(我更喜欢的解决方案):