如何在 docker 容器中启动类似 mysql 的服务?
How to launch a service like mysql in a docker container?
所以我尝试创建一个 docker-compose.yml
文件来为我的 Web 应用程序创建一个容器 laravel 并为我的数据库创建另一个容器 mariadb。我尝试 link 将这两个容器放在一起,以便 laravel 可以从 mariadb 获取数据。问题是我的 laravel 容器没有 mysql 套接字文件,所以它不能使用 mysql。我很确定我错过了一些东西,或者我不理解某些东西,因为没有任何效果。所以我的问题是 我们如何正确地将带有 laravel 的 archlinux 容器连接到 mysql 容器? 这是我的 docker-compose 文件
version: '3'
services:
database:
build: ./database
container_name: database.dev
command: mysqld --user=root --verbose
ports:
- "3307:3306"
restart: always
web:
build: .
volumes:
- "/app"
ports:
- "8000:8000"
links:
- database
depends_on:
- database
当我尝试在我的 archlinux 容器中安装 mysql 时,mysql 不会在 /etc/init.d/mysql
处创建服务或在 /run/mysqld/mysqld.sock
处创建套接字文件.当我尝试在我的容器终端中使用 mysql 时,我得到了这个输出。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2 "No such file or directory")
这是我的 docker 个文件:
database/Dockerfile
FROM mysql:latest
RUN mkdir -p /db
WORKDIR /db
COPY . /db
RUN cd /db
RUN /etc/init.d/mysql start
Dockerfile
FROM base/archlinux
RUN mkdir -p /app
WORKDIR /app
COPY . /app
RUN pacman -Syu --noconfirm
RUN pacman -S openssh composer php mariadb --noconfirm
RUN groupadd -g 89 mysql &>/dev/null
RUN useradd -u 89 -g mysql -d /var/lib/mysql -s /bin/false mysql &>/dev/null
#RUN chown -R mysql:mysql var/lib/mysql &>/dev/null
RUN mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
RUN COMPOSER_ALLOW_SUPERUSER=1
RUN cd /app
RUN /usr/bin/composer install
RUN echo APP_KEY= > .env
RUN echo DB_USERNAME=root >> .env
RUN echo DB_PASSWORD= >> .env
RUN cat php.ini > /etc/php/php.ini #my custom configuration for the project
RUN php artisan key:generate
RUN ln -srf storage/app/public public/storage
RUN php artisan storage:link
VOLUME ["/app"]
EXPOSE 8000
CMD php /app/artisan serve --host=0.0.0.0 --port=8000
我觉得我做的事情不对,任何人都可以帮助我或告诉我正确的方法吗?
GitHub 上的 repository 是 docker 的基于 ArchLinux 的映像,它包括 PHP、PHP-composer、MySQL、PostgreSQL和 MariaDB。我只需要稍微调整一下就可以让它工作并满足我的需要!
所以我尝试创建一个 docker-compose.yml
文件来为我的 Web 应用程序创建一个容器 laravel 并为我的数据库创建另一个容器 mariadb。我尝试 link 将这两个容器放在一起,以便 laravel 可以从 mariadb 获取数据。问题是我的 laravel 容器没有 mysql 套接字文件,所以它不能使用 mysql。我很确定我错过了一些东西,或者我不理解某些东西,因为没有任何效果。所以我的问题是 我们如何正确地将带有 laravel 的 archlinux 容器连接到 mysql 容器? 这是我的 docker-compose 文件
version: '3'
services:
database:
build: ./database
container_name: database.dev
command: mysqld --user=root --verbose
ports:
- "3307:3306"
restart: always
web:
build: .
volumes:
- "/app"
ports:
- "8000:8000"
links:
- database
depends_on:
- database
当我尝试在我的 archlinux 容器中安装 mysql 时,mysql 不会在 /etc/init.d/mysql
处创建服务或在 /run/mysqld/mysqld.sock
处创建套接字文件.当我尝试在我的容器终端中使用 mysql 时,我得到了这个输出。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/run/mysqld/mysqld.sock' (2 "No such file or directory")
这是我的 docker 个文件:
database/Dockerfile
FROM mysql:latest
RUN mkdir -p /db
WORKDIR /db
COPY . /db
RUN cd /db
RUN /etc/init.d/mysql start
Dockerfile
FROM base/archlinux
RUN mkdir -p /app
WORKDIR /app
COPY . /app
RUN pacman -Syu --noconfirm
RUN pacman -S openssh composer php mariadb --noconfirm
RUN groupadd -g 89 mysql &>/dev/null
RUN useradd -u 89 -g mysql -d /var/lib/mysql -s /bin/false mysql &>/dev/null
#RUN chown -R mysql:mysql var/lib/mysql &>/dev/null
RUN mysql_install_db --user=mysql --basedir=/usr --datadir=/var/lib/mysql
RUN COMPOSER_ALLOW_SUPERUSER=1
RUN cd /app
RUN /usr/bin/composer install
RUN echo APP_KEY= > .env
RUN echo DB_USERNAME=root >> .env
RUN echo DB_PASSWORD= >> .env
RUN cat php.ini > /etc/php/php.ini #my custom configuration for the project
RUN php artisan key:generate
RUN ln -srf storage/app/public public/storage
RUN php artisan storage:link
VOLUME ["/app"]
EXPOSE 8000
CMD php /app/artisan serve --host=0.0.0.0 --port=8000
我觉得我做的事情不对,任何人都可以帮助我或告诉我正确的方法吗?
GitHub 上的 repository 是 docker 的基于 ArchLinux 的映像,它包括 PHP、PHP-composer、MySQL、PostgreSQL和 MariaDB。我只需要稍微调整一下就可以让它工作并满足我的需要!