TL;DR: Хост стороннего контейнера имеет следующий вид "blahblah", но подключиться к нему надо, имея в качестве имени "some.blahblah".
А теперь чуть подробнее:
Поднял контейнер с s3 (minito), имеет следующие конфиги:
minio:
container_name: "minio"
build: ./docker/minio
volumes:
- minio:/export
ports:
- "9000:9000"
environment:
- MINIO_ACCESS_KEY=access
- MINIO_SECRET_KEY=secretkey
Т.е. ничего экстраординарного. Для подключения из под основного клиента (контейнера приложения) использую следующий хост:
minio:9000.
Всё логично, всё резолвится.
Но если использовать бакет (без него - не работает) - хост заменяется на "
bucket.minio:9000" и естественно он уже не резолвится.
Починить можно захардкодив оный в родительском контейнере (в том, кто обращается к s3) через:
extra_hosts:
- "bucket.minio:172.25.0.4"
В этом случае при обращении к bucket.minio запрос пойдёт на нужный айпишник (при удачных обстоятельствах, когда он действительно 172.25.0.4) и всё ок. Но это суперкостыль, что довольно очевидно.
Вопрос: Как нормально подключиться к контейнеру s3 (с именем minio) имея в качестве адреса хоста "bucket.minio"? Или всё же какой-нибудь нгинкс прокси запилить?
Конфиги окружения следующие:
S3_HOST=http://minio:9000
S3_KEY=access
S3_SECRET=secret
S3_REGION=us-east-1
S3_BUCKET=bucket
Драйвер AWS от Flysystem (дефолтный для Laravel).
UPD1: Вот такой вариант в Dockerfile, шайтанамана, не пашет, хотя казалось бы...
RUN getent hosts minio | awk '{ print $1 " bucket." $2 }' >> /etc/hosts
// Original
$ ping minio
PING minio (172.26.0.4): 56 data bytes
64 bytes from 172.26.0.4: icmp_seq=0 ttl=64 time=0.065 ms
$ curl minio:9000
<?xml version="1.0" encoding="UTF-8"?>
<Error><Code>AccessDenied</Code><Message>Access Denied.</Message><Key></Key><BucketName></BucketName><Resource>/</Resource><RequestId>3L137</RequestId><HostId>3L137</HostId></Error>
// Alias
$ ping bucket.minio
PING bucket.minio (172.25.0.4): 56 data bytes
...
36 packets transmitted, 0 packets received, 100% packet loss
$ curl bucket.minio:9000
...
Вообще вешается