我想将我的 mysql 数据库添加到运行 ubuntu 并安装了 mysql 和 php 的 Dockefile 中。该文件夹的结构如下: 文件夹 |_ Dockerfile |_ 开始.sh |_ 索引.php |_ init.sql
问题是start.sh没有执行我的所有代码,所以init.sql没有导入到mysql中。我在 StackOverflow 上查看了一些解决方案,但没有一个有效。
这是 Dockerfile
FROM ubuntu:latest
RUN apt-get update && apt-get upgrade -y
RUN DEBIAN_FRONTEND=noninteractive apt-get install apache2 php libapache2-mod-php php-mysql mysql-server -y
VOLUME ["/var/lib/mysql"]
ADD init.sql /tmp/init.sql
COPY index.php /var/www/html/
COPY start.sh /bin/
RUN chmod +x /bin/start.sh
EXPOSE 80 3306
CMD "/bin/start.sh"
这是start.sh
#!/bin/bash
/usr/sbin/apache2ctl -D FOREGROUND
/usr/bin/mysqld_safe
mysql -u root -e "CREATE DATABASE mydb"
mysql -u root mydb < /tmp/init.sql
我不确定问题到底是 start.sh,无论如何,每个 docker-compose 解决方案对我来说都是无用的,因为我需要 Dockerfile 中的所有内容
最佳答案
首先您必须重新排序 start.sh
中的顺序,因为前台的 apache 会阻止您运行 mysql 。
#!/bin/bash
chown -R mysql:mysql /var/lib/mysql /var/run/mysqld && /etc/init.d/mysql start
while [ ! -e /var/run/mysqld/mysqld.sock ]
do
sleep 2
done
mysqladmin ping
mysql -u root -e "CREATE DATABASE mydb"
mysql -u root mydb < /tmp/init.sql
/usr/sbin/apache2ctl -D FOREGROUND
并且您必须修改您的 Dockerfile
以添加:
RUN mkdir /var/run/mysqld ; chown mysql.mysql /var/run/mysqld
关于php - 在ubuntu容器上添加mysql数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58458245/