Ошибка подключения к контейнеру DynamoDB Docker

Я изучаю PHP и пытаюсь создать таблицу в докерном контейнере динамодб. У меня есть 3 контейнера в моем докере compose, web (nginx), php (7.1-fpm) с AWS SDK и динамодаб. (Dockerfiles ниже).

Я получаю следующую ошибку:

Unable to create table: Error executing "CreateTable" on "http://dynamodb:8000"; AWS HTTP error: cURL error 6: Could not resolve host: dynamodb (see http://curl.haxx.se/libcurl/c/libcurl-errors.html)

У меня есть следующий docker-composer.yml

web:
image: nginx:latest
ports:
- "8080:80"- "8000:8000" // as you can see i tried to open the port on web if that was the problem
volumes:
- ./code:/code
- ./site.conf:/etc/nginx/conf.d/site.conf
links:
- php
- dynamodb:db // i also tried to access it by dynamodb or db
php:
build: php/
volumes:
- ./code:/code
dynamodb:
build: dynamodb/
expose:
- 8000 // I think this is redundant I also have expose in the Dockerfile

DynamoDb Dockerfile:

FROM openjdk:7

MAINTAINER <redacted>

RUN mkdir -p opt/dynamodb
WORKDIR /opt/dynamodb

RUN wget http://dynamodb-local.s3-website-us-west-2.amazonaws.com/dynamodb_local_latest.tar.gz -q -O - | tar -xz

ENV AWS_ACCESS_KEY_ID MINE
ENV AWS_SECRET_ACCESS_KEY MINE TOO

EXPOSE 8000

ENTRYPOINT ["java", "-jar", "DynamoDBLocal.jar", "-sharedDb"]

PHP Dockerfile:

FROM php:7.1-fpm

RUN apt-get update && \
apt-get -y install git libz-dev libtidy-dev && \
docker-php-ext-install tidy && \
docker-php-ext-install zip

# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# PHP Configuration required for PHP SDK
RUN touch /usr/local/etc/php/conf.d/memory.ini \
&& echo "memory_limit = 2048M;" >> /usr/local/etc/php/conf.d/memory.ini

RUN touch /usr/local/etc/php/conf.d/phar.ini \
&& echo "phar.readonly = Off;" >> /usr/local/etc/php/conf.d/phar.ini

RUN touch /usr/local/etc/php/conf.d/timezone.ini \
&& echo "date.timezone ='America/Los_Angeles'" >> /usr/local/etc/php/conf.d/timezone.ini

RUN cd / && \
git clone https://github.com/aws/aws-sdk-php.git

ENV AWS_ACCESS_KEY_ID MINE
ENV AWS_SECRET_ACCESS_KEY MINE TOO


RUN cd /aws-sdk-php && \
composer install && \
make build && \
make test

index.php

<?php
require("/aws-sdk-php/vendor/autoload.php");
use Aws\DynamoDb\Exception\DynamoDbException;

$sdk = new Aws\Sdk([
'endpoint'  => 'http://localhost:8000', // i have tried localhost, db, and dynamodb here
'region'    => 'us-east-2',
'version'   => 'latest',
'credentials' => [
'key' => 'mine',
'secret' => 'mine too'
]

]);

$dynamodb = $sdk->createDynamoDb();

$params = [
'TableName'  => 'Movies',
'KeySchema'  => [
[
'AttributeName' => 'year',
'KeyType'       => 'HASH'
],
[
'AttributeName' => 'title',
'KeyType'       => 'RANGE'
]
],
'AttributeDefinitions'  => [
[
'AttributeName' => 'year',
'AttributeType' => 'N'
],
[
'AttributeName' => 'title',
'AttributeType' => 'S'
],
],
'ProvisionedThroughput' => [
'ReadCapacityUnits' => 10,
'WriteCapacityUnits' => 10
]
];

try {
$result = $dynamodb->createTable($params);
echo 'Created table. Status: ' .
$result['TableDescription']['TableStatus'] ."\n";
} catch (DynamoDbException $e) {
echo "Unable to create table: \n";
echo $e->getMessage() . "\n";
}
?>

Я новичок в Docker, PHP и AWS, поэтому, если я пропустил любую необходимую информацию, дайте мне знать.

Что я пробовал?

Я попытался использовать localhost вместо DynamodB (также пытался использовать DB с ссылкой DynamodB: DB в веб-контейнере)

Я должен попытаться сопоставить порт на веб-8000: 8000, я открыт для любых предложений.

0

Решение

Для тех, кто может столкнуться с аналогичной проблемой, как я:

Мне нужно было связать контейнер dynamicodb с контейнером php, потому что контейнер php выполняет код, а не веб-контейнер.

Этот файл docker-compose заставил меня отсортировать:

web:
image: nginx:latest
ports:
- "8080:80"- "8000:8000"volumes:
- ./code:/code
- ./site.conf:/etc/nginx/conf.d/site.conf
links:
- php
- dynamodb:db // <-- Probably unnecessary, requires more testing
php:
build: php/
volumes:
- ./code:/code
links:
- dynamodb // <-- Important
dynamodb:
build: dynamodb/
expose:
- 8000
0

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector