文章目录
前言
最近帮学校的新生出一个sql注入的题目(19级甚至20级都开始入门了,我一个18级的还是个菜鸡,要我帮他们出题,真难为我了),然后 pull 了两个 docker 镜像,php:5.6.11-apache 和 mysql:5.7,问题来了
1. 一开始,我用 127.0.0.1:3306 去访问,结果出错了,还半天不知道原因在哪
2. php mysqli 扩展未安装
3. docker run -v 的路径问题
一、容器互访
1. docker run --link
使用 docker run 命令的时候添加参数 --link 已存在的容器名:自定容器别名
,如图:
这样运行的容器会在 /etc/hosts 文件中加入一条记录,包含 ip 地址,容器别名,id,容器名(在容器名与容器别名相同的时候为只有前三项),至于 ip 可以使用 docker inspect mysql|grep IPAddress
查看,如下:
所以第二种方法也出来了
2. 修改 /etc/hosts
直接使用命令 echo "ip 容器名 id " >> /etc/hosts
,将记录添加进 /etc/hosts 也可
3. docker-compose.yml
在 yml 文件中添加 links 或 depends_on 标签,如下图:
二、php 扩展安装
在 docker 容器的 /usr/local/bin 文件夹下有个程序 docker-php-ext-install
可以用于php扩展的安装
可以直接进入容器内安装或在 Dockerfile 中写入如下内容:
直接在 docker-compose.yml 中用 command 执行该命令,命令执行完后容器会自动退出,使用多行命令又会出错,没有找到解决的办法,望师傅们指点指点
三、docker run -v 路径问题
一开始,我是这样写的 -v www:/var/www/html
,结果不知道在哪个地方创建了一个 www 文件,但是使用相对路径 -v ./www:/var/www/html
会报错,最后使用绝对路径解决
之所以想记录一下这个问题,是因为在百度的时候发现有个师傅的操作很骚,他是这么写的
-v `pwd`/www:/var/www/html
四、完整文件
我把它放到了 github 中了,可以直接 clone 下来搭建一个 sql 注入的环境,https://github.com/y0un9er/php-mysql
docker-compose.yml
version: '2'
services:
mysql:
image: mysql:5.7
container_name: mysql
ports:
- "3306:3306"
environment:
- MYSQL_ROOT_PASSWORD=123456
web:
build:
context: .
dockerfile: Dockerfile
container_name: web
ports:
- "10080:80"
links:
- mysql
volumes:
- ./www:/var/www/html
Dockerfile,其实就一句 RUN 而已,真的超想写到 docker-compose.yml 中去
FROM php:5.6.11-apache
RUN /usr/local/bin/docker-php-ext-install mysql mysqli
总结
出个题真不容易啊,不过遇到问题到解决问题真的能给人一种很充实的感觉