如何通过使用Apache的PHP7.1在AMI Linux上的本地Docker开发中连接到MySQL

我一直在为当地的Docker开发环境工作大概一周。 我们宁愿使用Ubuntu Linux,CentOS和RedHat上的Amazon Linux。

这是我迄今为止所采取的步骤:

1)创build一个虚拟机工作

docker-machine create --driver virtualbox default 

2)将我的terminal连接到正在运行的虚拟机:

 eval "$(docker-machine env default)" 

3)拉AMI Linux:

 docker pull amazonlinux 

4)构build一个具有PHP 7.1和Apache 2.4的Dockerfile图像容器

/ AppFolder /搬运工/图像/ apachephp / AMI / Dockerfile

 FROM amazonlinux MAINTAINER Cameron Macfarlane <cammac1984@gmail.com> RUN yum update -y RUN yum install httpd24 vim php71 php71-pdo php71-mbstring php71-pecl-imagick php71-opcache -y EXPOSE 80 # Start the service CMD ["-D", "FOREGROUND"] ENTRYPOINT ["/usr/sbin/httpd" 

5)编译成killacam / apachephp

 docker build -t killacam/apachephp docker/images/apachephp/ami/. 

6)创build一个虚拟主机文件,将我的本地应用程序连接到文档根目录

/docker/vhost.cnf

 <VirtualHost *:80> ServerAdmin webmaster@local DocumentRoot /var/www/html/public ServerName docker.dev <Directory /var/www/html/public> Options Indexes FollowSymLinks MultiViews AllowOverride All Order allow,deny allow from all </Directory> </VirtualHost> 

7)构build一个MySQL 5.6的Dockerfile(包含/ var / lib / mysql并显示端口3306)

/ AppFolder /搬运工/图像/ MySQL的/ AMI / Dockerfile

 FROM amazonlinux MAINTAINER Cameron Macfarlane <cammac1984@gmail.com> RUN yum update -y RUN yum install mysql56-server -y RUN chown -R mysql:root /var/lib/mysql/ EXPOSE 3306 

8)编译成killacam / mysql

 docker build -t killacam/mysql docker/images/mysql/ami/. 

9)为MySQLconfiguration创build一个my.cnf文件(user = root是更改)

目前它位于AppFolder / my.cnf中

 [mysqld] user=root datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock sql-mode="STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" 

字符集服务器= UTF8

10)创build一个docker-compose文件(版本2)

/AppFolder/docker-compose.yml

 version: '2' services: apachephp: image: killacam/apachephp ports: - "8080:80" volumes: - ./:/var/www/html - ./docker/vhost.conf:/etc/httpd/conf.d/vhost.conf networks: - appnet mysql: image: killacam/mysql #mysql:5.6 ports: - "3306:3306" volumes: - ./data/:/var/lib/mysql - ./my.cnf:/etc/my.cnf tty: true networks: - appnet #environment: #- "MYSQL_DATABASE=csg" #- "MYSQL_USER=test" #- "MYSQL_PASSWORD=qwe123" #- "MYSQL_ROOT_PASSWORD=root" networks: appnet: driver: "bridge" 

运行文件docker-compose up

当我在浏览器中打开docker.dev:8080时,出现数据库连接问题。 到目前为止,我已经尝试了官方MySQL 5.6包和我自己定制的包。

我也尝试运行只是killacam/mysql包自己像这样:

docker run -it -p 3306:3306 -v $(pwd)/my.cnf:/etc/my.cnf killacam/mysql;

并启动MySql: mysqld但我不断收到此错误

[ERROR] Fatal error: Can't open and lock privilege tables: Table 'mysql.user' doesn't exist

根据这里find的AWS AMI说明http://docs.aws.amazon.com/AWSEC2/latest/UserGuide/install-LAMP.html你需要运行

sudo service mysqld start然后执行sudo mysql_secure_installation

但是当您尝试运行这些命令时,它们会失败: sudo service mysqld start因为AMI docker映像出于某种原因未附带init脚本。

那里的任何人都曾经设置过Docker在AMI上运行MySQL来进行本地开发,可以帮助我?

谢谢!

确定发布这个问题后,我决定给官方MySQL包另一个镜头,现在我在业务!

我不得不添加user: "1000:50"到我的docker-compose文件来解决一些权限问题,最后删除了MYSQL_USER, MYSQL_PASSWORD and MYSQL_DATABASE ,只留下了MYSQL_ROOT_PASSWORD

对于任何人发现他们自己有类似的问题,这里是我的最后一个docker-compose.yml

version: '2' services: apachephp: image: killacam/apachephp ports: - "8080:80" volumes: - ./:/var/www/html - ./docker/vhost.conf:/etc/httpd/conf.d/vhost.conf networks: - appnet mysql:
image: mysql:5.6 ports: - "3306:3306" volumes: - ./data/:/var/lib/mysql user: "1000:50" tty: true networks: - appnet environment: # - "MYSQL_DATABASE=csg" #- "MYSQL_USER=test" #- "MYSQL_PASSWORD=qwe123" - "MYSQL_ROOT_PASSWORD=root" networks: appnet: driver: "bridge"

在我的数据库configuration中,我需要将主机更改为DB_HOST=mysql