首页 > 解决方案 > Docker mysql环境

问题描述

我有一个基于 FROM 的 Dockerfile,php:alpine我正在尝试将 mysql 添加到构建中。

FROM php:alpine

COPY test-data/ /var/www/

RUN apk add --update --no-cache \
    mysql

# Composer
RUN curl -s https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin/ --filename=composer
ENV COMPOSER_ALLOW_SUPERUSER=1

WORKDIR /var/www

我的问题是在成功构建后,我尝试使用 mysql 环境覆盖运行容器,但我无法在容器内登录 mysql。

$ docker run -e MYSQL_DATABASE=homestead -e MYSQL_USER=homestead -e MYSQL_PASSWORD=secret -e MYSQL_ROOT_PASSWORD=secret -ti --rm idecardo /bin/sh

测试mysql登录失败

$ mysql -uroot -p # with password "secret"

标签: phpmysqldockeralpine

解决方案


由于您是新手 - 始终尝试通过复制准备好的工作代码并分解该代码中正在执行的操作来学习。

对于 Docker:

  1. 您可以看到 mysql 的 docker 存储库 - https://hub.docker.com/_/mysql/ 在描述部分下,您将看到指向不同 MySQL 版本的各种 docker 文件的链接。
  2. 将其中一个作为灵感来源,例如 8.0/Dockerfile 的链接:https ://github.com/docker-library/mysql/blob/fc3e856313423dc2d6a8d74cfd6b678582090fc7/8.0/Dockerfile
  3. 请注意,在该 dockerfile 中的 mysql 安装说明之后,有 Entrypoint 和 CMD 说明。

一般来说:

由于您希望 php 和 mysql 在 docker 上工作 - 我的建议是让您了解 docker-compose。Docker 容器可以以多种方式运行,docker-compose 允许您启动多个 docker 容器,在它们之间共享一些文件夹。在这种情况下,您可能希望启动单独的 mysql 容器和单独的 php 容器,在它们之间共享主机数据文件夹并启动您的代码。

另外,在线观看一些视频教程——它们详细解释了 docker 的基本知识以及它是如何工作的。


推荐阅读