我尝试使用以下
创建Docker(LAMP)图像Dockerfile :
FROM ubuntu:latest
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
apache2 \
mysql-server \
php7.0 \
php7.0-bcmath \
php7.0-mcrypt
COPY start-script.sh /root/
RUN chmod +x /root/start-script.sh && /root/start-script.sh
start-script.sh:
#!/bin/bash
service mysql start
a2enmod rewrite
service apache2 start
我用它构建它:
docker build -t resting/ubuntu .
然后用:
运行它docker run -it -p 8000:80 -p 5000:3306 -v $(pwd)/html:/var/www/html resting/ubuntu bash
问题是,MYSQL
和Apache2
服务未启动
如果我在容器中手动运行/root/start-script.sh
,端口80可以很好地映射到端口8000,但我无法通过MYSQL
连接到127.0.0.1:5000
。
当我使用图像启动容器并将MYSQL映射到我的主机时,如何确保服务正在运行?
答案 0 :(得分:1)
您需要将脚本的执行更改为CMD
指令。
FROM ubuntu:latest
RUN apt-get update \
&& DEBIAN_FRONTEND=noninteractive apt-get install -y \
apache2 \
mysql-server \
php7.0 \
php7.0-bcmath \
php7.0-mcrypt
COPY start-script.sh /root/
RUN chmod +x /root/start-script.sh
CMD /root/start-script.sh
虽然这有效,但这不是管理容器的正确方法。您应该为Apache2
设置一个容器,为MySQL
设置另一个容器。
看看这篇使用Docker-Compose构建LAMP堆栈的文章:https://www.kinamo.be/en/support/faq/setting-up-a-development-environment-with-docker-compose
答案 1 :(得分:0)
您需要多个图片 - 每个服务或应用一个。
Docker容器不是运行整个堆栈的虚拟机。它是一个虚拟应用程序,运行一个主要进程。
如果你需要php,apache和mysql,那么你将需要3个docker容器。一个用于您的php应用程序,一个用于apache,一个用于mysql。