Docker Compose не позволяет использовать локальные изображения
Следующая команда не работает, пытаясь вытащить изображение из Docker Hub:
$ docker-compose up -d
Pulling web-server (web-server:staging)...
ERROR: repository web-server not found: does not exist or no pull access
Но я просто хочу использовать локальную версию изображения, которая существует:
$ docker images
REPOSITORY TAG IMAGE ID CREATED SIZE
web-server staging b94573990687 7 hours ago 365MB
Почему Docker не выполняет поиск среди локально сохраненных изображений?
Это мой файл Docker Compose:
version: '3'
services:
chat-server:
image: chat-server:staging
ports:
- "8110:8110"
web-server:
image: web-server:staging
ports:
- "80:80"
- "443:443"
- "8009:8009"
- "8443:8443"
и мой .env файл:
DOCKER_HOST=tcp://***.***.**.**:2376
DOCKER_TLS_VERIFY=true
DOCKER_CERT_PATH=/Users/Victor/Documents/Development/projects/.../target/docker
Ответы
Ответ 1
В общем, это должно работать, когда вы его описываете. Пытался воспроизвести его, но он просто работал...
Структура папки:
.
├── docker-compose.yml
└── Dockerfile
Содержимое файла Docker:
FROM alpine
CMD ["echo", "i am groot"]
Изображение сборки и тегов:
docker build -t groot .
docker tag groot:latest groot:staging
с docker-compose.yml:
version: '3.1'
services:
groot:
image: groot:staging
и запустите docker-compose:
$ docker-compose up
Creating groot_groot ...
Creating groot_groot_1 ... done
Attaching to groot_groot_1
groot_1 | i am groot
groot_groot_1 exited with code 0
Ответ 2
В вашем docker-compose.yml вы можете указать build: .
вместо build: <username>/repo>
для локальных сборок (вместо извлечения из docker-hub) - я пока не могу проверить это, но я полагаю, что вы можете сделать относительный пути для нескольких сервисов к файлу docker-compose.
services:
app:
build: .
Ссылка: https://github.com/gvilarino/docker-workshop
Ответ 3
Возможно, вам понадобится изменить свой тег изображения, чтобы две части были разделены косой чертой /
. Поэтому вместо
chat-server:staging
сделайте что-нибудь вроде:
victor-dombrovsky/chat-server:staging
Я думаю, что существует некоторая логика тегов Docker, а теги "одной части" интерпретируются как официальные изображения, поступающие из DockerHub.
Ответ 4
Добавление ответа @Tom Saleeba,
Я все еще получил ошибки после пометки контейнера с "/"
(например: victor-dombrovsky/docker-image:latest
)
Он продолжал искать изображение с удаленного сервера docker.io.
registry_address/docker-image
Кажется, что URL перед "/" является адресом реестра, а после "/" - именем изображения. и без "/", docker-compose по умолчанию ищет изображение из удаленного docker.io.
Кажется, это известная ошибка с docker-compose
Наконец-то я заработал, запустив локальный реестр, переместившись в локальный реестр с тегом реестра и вытянув изображение из локального реестра.
$ docker run -d -p 5000:5000 --restart=always --name registry registry:2
$ docker tag your-image-name:latest localhost:5000/your-image-name
$ docker push localhost:5000/your-image-name
а затем измените URL изображения в файле Docker:
version: '3'
services:
chat-server:
image: chat-server:staging
ports:
- "8110:8110"
web-server:
image: localhost:5000/your-image-name #####change here
ports:
- "80:80"
- "443:443"
- "8009:8009"
- "8443:8443"
Аналогично для чата-сервера.