当前位置: 首页 > 知识库问答 >
问题:

Php artisan migrate在docker容器上不起作用

柴阳云
2023-03-14

解决方案:docker检查|grep IP获取运行容器ip的postgres,并分别用容器的ip和port更新您的envDB_HOST和DB_PORT。

更新:由于ip地址可能会更改,因此将postgres写入DB_主机是最佳做法。

我一直在寻找一天的时间将数据库从docker容器连接到我的Laravel应用程序,但无论我做了什么尝试,即使我可以通过Postco连接,我也无法迁移我的数据库。我得到以下错误:

SQLSTATE[08006][7]无法连接到服务器:连接被拒绝服务器是否在主机“localhost”(127.0.0.1)上运行并在端口3306上接受TCP/IP连接?

我的Dockerfile:

FROM php:7.1.3-fpm-alpine

RUN apk update && apk add build-base

RUN apk add postgresql postgresql-dev \
  && docker-php-ext-configure pgsql -with-pgsql=/usr/local/pgsql \
  && docker-php-ext-install pdo pdo_pgsql pgsql

RUN apk add zlib-dev git zip \
  && docker-php-ext-install zip

RUN curl -sS https://getcomposer.org/installer | php \
        && mv composer.phar /usr/local/bin/ \
        && ln -s /usr/local/bin/composer.phar /usr/local/bin/composer

COPY . /app
WORKDIR /app

RUN composer install --prefer-source --no-interaction

ENV PATH="~/.composer/vendor/bin:./vendor/bin:${PATH}"

我的docker撰写文件:

version: '2'
services:
  nginx:
    image: nginx:1.11.10-alpine
    ports:
      - 3000:80
    volumes:
      - ./nginx.conf:/etc/nginx/conf.d/default.conf
    depends_on:
      - api
  api:
    build: .
    ports:
      - 9000:9000
    volumes:
      - .:/app
      - /app/vendor
    depends_on:
      - postgres
    environment:
      DATABASE_URL: postgres://foodorder@postgres/foodorder
  postgres:
    image: postgres:latest
    environment:
      POSTGRES_USER: foodorder
      POSTGRES_DB: foodorder
      POSTGRES_PASSWORD: 123123
    ports:
      - 3306:5432

我的环境文件:

DB_CONNECTION = "pgsql"
DATABASE_CONNECTIONS_MASTER_PGSQL_HOST="localhost"
DATABASE_CONNECTIONS_MASTER_PGSQL_SCHEMA="foodorder"
DATABASE_CONNECTIONS_MASTER_PGSQL_DATABASE="foodorder"
DATABASE_CONNECTIONS_MASTER_PGSQL_PORT="3306"
DATABASE_CONNECTIONS_MASTER_PGSQL_USERNAME="foodorder"
DATABASE_CONNECTIONS_MASTER_PGSQL_PASSWORD="123123"

最后,在我的database.php中,

'default' => env('DB_CONNECTION', 'pgsql'),

'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_HOST'),
            'port' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_PORT'),
            'database' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_DATABASE'),
            'username' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_USERNAME'),
            'password' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_PASSWORD'),
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => env('DATABASE_CONNECTIONS_MASTER_PGSQL_SCHEMA'),
            'sslmode' => 'prefer',
        ],

共有1个答案

长孙阳嘉
2023-03-14

检查数据库用户是否可以访问localhost127.0.0.1。听起来好像您正在尝试连接到localhost,但仅授予127.0.0.1访问权限,反之亦然。

 类似资料:
  • 问题内容: 我正在Ubuntu 13.04(Raring Ringtail)之上运行最新版本的Docker: 但是当我启动容器时 我没有看到任何限制,并且我的内核启用了cgroups内存限制: 我在这里想念什么明显的东西? 问题答案: 将不会显示它,因为这是通过cgroups强制执行的。而是可以在主机(容器外部)上使用和cgroup内存进行检查: 要查看它的内存不足,可以运行一些将使用比分配的内存

  • 问题内容: 我有这个Docker Compose配置,我只需创建一个NodeJS容器并在其中安装Angular CLI。 之后,我可以使用SSH在容器内进行SSH 。可以正常工作,但似乎不起作用。它已正确启动,控制台中没有错误。但是,如果我访问(我将端口4200映射到80),则不会加载任何内容。 我想念什么吗? 问题答案: 在您的Dockerfile中,您缺少Expose行,例如: 尝试将其放在d

  • 我想在从Debian官方Docker中心仓库派生的docker容器中执行ps命令:

  • 我有一个容器,我想停止,但当我做一个它挂起,永远不会停止它。 我试过正常的和

  • 我有一个python脚本,它计算给定文件的字数,并在执行后将输出保存到“result.txt”文件中。我希望docker容器在容器启动时执行此操作,并在控制台上显示输出。下面是我的docker文件和python文件 我正在映射一个本地目录,它有两个文本文件IF. txt和Limerick1.txt从主机到容器内的目录/home/data,容器内的python代码读取文件并将输出保存到result.

  • 问题内容: 我想在页脚元素的右边放置文本(foo链接)。 我需要保留页脚显示。 但是当我将其设置为时,span不再起作用。 问题答案: 该属性在flex容器中被忽略。 根据flexbox规范: 3. Flex容器:和显示值 一个伸缩容器为其内容建立一个新的_伸缩格式上下文_。这与建立块格式化上下文相同,除了使用Flex布局而不是块布局。 例如,浮点数不会侵入flex容器,并且flex容器的边距不会