首页 > 解决方案 > 像 URL 一样访问 docker 容器

问题描述

我有一个用 PHP、Nginx 和 dynamodb 开发的应用程序。我创建了一个简单的 docker-compose 在本地工作。

version: '3.7'

services:
  nginx_broadway_demo:
    container_name: nginx_broadway_demo
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - ./www:/var/www
      - ./docker/nginx/vhost.conf:/etc/nginx/conf.d/default.conf
      - ./docker/nginx/nginx.conf:/etc/nginx/nginx.conf
    links:
      - php_fpm_broadway_demo

  php_fpm_broadway_demo:
    container_name: php_fpm_broadway_demo
    build:
      context: ./docker/php
    ports:
      - 9000:9000
    volumes:
      - .:/var/www/web

  dynamodb:
    image: amazon/dynamodb-local
    ports:
      - 8000:8000
    expose:
      - 8000

现在我需要添加 dynamodb URL 参数以允许 PHP 对数据库进行查询。因此,如果我像这样从 PHP docker 容器进行 ping 操作,效果很好:

ping dynamodb

这行不通。

ping http://dynamodb:8000

我需要使用 http://dynamodb:8000,因为 AWS 需要一个 URI,因为如果我使用 http://dynamodb:8000 会出现此错误:

Endpoints must be full URIs and include a scheme and host

那么:如何像 URL 一样调用 docker 容器?我尝试过使用 docker-compose 参数,例如:depends, linksnetwork但没有成功

标签: phpamazon-web-servicesdockerdocker-composeamazon-dynamodb

解决方案


正如聊天中所讨论的,当依赖项安装在主机上并在容器内用作基础平台上的作曲家工作时,就会出现错误。

因此,我们调查该问题是由于上述原因造成的。安装dependency在容器内解决了这个问题。

docker exec -it php bash -c "cd web; composer install"

推荐阅读