运行 LAMP 的 Dockerfile (Ubuntu)

res*_*ing 6 lamp docker

我正在尝试使用以下内容创建 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
Run Code Online (Sandbox Code Playgroud)

启动脚本.sh:

#!/bin/bash
service mysql start
a2enmod rewrite
service apache2 start
Run Code Online (Sandbox Code Playgroud)

我用以下方法构建它:

docker build -t resting/ubuntu .
Run Code Online (Sandbox Code Playgroud)

然后运行它:

docker run -it -p 8000:80 -p 5000:3306 -v $(pwd)/html:/var/www/html resting/ubuntu bash
Run Code Online (Sandbox Code Playgroud)

问题是,MYSQLApache2服务没有启动。
如果我/root/start-script.sh在容器中手动运行,端口 80 可以很好地映射到端口 8000,但我无法MYSQL使用127.0.0.1:5000.

当我使用映像启动容器并将 MYSQL 映射到我的主机时,如何确保服务正在运行?

kst*_*aos 4

您需要将脚本的执行更改为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
Run Code Online (Sandbox Code Playgroud)

虽然这可行,但这不是管理容器的正确方法。您应该有一个容器用于存放您的物品Apache2,另一个容器用于存放MySQL.

查看这篇使用 Docker-Compose 构建 LAMP 堆栈的文章:https://www.kinamo.be/en/support/faq/setting-up-a-development-environment-with-docker-compose