【发布时间】:2019-08-14 19:27:28
【问题描述】:
我的主机上有一个 MySQL 服务器,我希望我的 docker 容器连接到它,而不是创建一个 MySQL 容器。
在我的应用程序配置文件中,我使用localhost,就像我在使用 Docker 之前所做的那样,但连接被拒绝。
我正在使用 docker-compose,这是我的.yml:
version: "3.2"
services:
php:
build:
context: './dockerfiles/php/'
args:
PHP_VERSION: ${PHP_VERSION}
networks:
- backend
volumes:
- ${PROJECT_ROOT}/:/var/www/html/
container_name: acadbase_php
apache:
build:
context: './dockerfiles/apache/'
args:
APACHE_VERSION: ${APACHE_VERSION}
depends_on:
- php
networks:
- frontend
- backend
ports:
- "8080:80"
volumes:
- ${PROJECT_ROOT}/:/var/www/html/
container_name: acadbase_apache
networks:
frontend:
backend:
volumes:
data:
我的./dockerfiles/php/Dockerfile:
ARG PHP_VERSION=""
FROM php:${PHP_VERSION:+${PHP_VERSION}-}fpm-alpine
RUN apk update; \
apk upgrade; \
apk add libxml2-dev
RUN docker-php-ext-install mysqli soap mbstring xml pdo_mysql
我的./dockerfiles/apache/Dockerfile:
ARG APACHE_VERSION=""
FROM httpd:${APACHE_VERSION:+${APACHE_VERSION}-}alpine
RUN apk update; \
apk upgrade; \
apk add vim;
COPY acadbase.conf /usr/local/apache2/conf/acadbase.conf
RUN echo "Include /usr/local/apache2/conf/acadbase.conf" \
>> /usr/local/apache2/conf/httpd.conf
我的.env:
PHP_VERSION=7.1
APACHE_VERSION=2.4
PROJECT_ROOT=.
【问题讨论】:
-
您没有在 docker-compose.yaml 中从 hostport:containerport 进行任何端口映射,这使容器内的进程可以访问主机上可见的端口
-
@ScottStensland 但如果我这样做了,我应该使用什么 IP 与我的应用程序中创建的端口一起执行此连接?
-
none ...查看您当前的 apache 端口设置为“8080:80”,它只是将主机端口 8080 映射到容器端口 80 ...对您的 sql 端口执行类似操作
-
@ScottStensland 我的应用程序配置文件中有这个字符串:'mysql:host=localhost;dbname=admin'。如果我只创建一个新的端口连接“3306:3307”,我将不能使用“localhost”作为主机,因为它指向容器,而不是主机。而且我什至无法创建这样的端口,因为当我这样做时,我得到了
Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use
标签: php mysql apache docker docker-compose