Рок Docker не собирается правильно из Dockerfile - PullRequest
0 голосов
/ 15 октября 2019

Я использую Docker Swarm с движком Docker версии 19.03.3.

У меня проблема с сборкой psql, похоже, что Dockerfile работает правильно, и я выдвигаю новую службу в реестр, но когда контейнерЯ обнаружил, что все файлы COPY отсутствуют, и расширение psql "Postgis", которое я устанавливаю на Dockerfile, не установлено.

Я не вижу никаких ошибок, и поэтому я не знаю, в чем проблема.

Dockerfile:

FROM postgres
RUN apt-get update -y
RUN apt-get install -y postgis
COPY cluster/ /docker-entrypoint-initdb.d/

рой yml-файл:

        db:
                build: docker-compose.d/postgres
                image: 127.0.0.1:5000/postgres
                restart: 'always'
                environment:
                        - PG_MAX_WAL_SENDERS=8
                        - PG_WAL_KEEP_SEGMENTS=8
                        - PGDATA=/var/lib/postgresql/data/pgdata
                        - POSTGRES_USER=USER
                        - POSTGRES_PASSWORD=password
                volumes:
                        - /db_data:/var/lib/postgresql/data'
                deploy:
                 placement:
                   constraints:
                       - node.role==manager

шаги:

docker service create --name=registry --publish published=5000,target=5000 registry
qhetvgzqj0f8g1t4nxxx76cqz
overall progress: 1 out of 1 tasks
1/1: running
verify: Service converged


docker-compose build --no-cache db #if i dont use --no-cache it doesnt rebuild service

Successfully built f6413978c21c
Successfully tagged 127.0.0.1:5000/postgres:latest

docker-compose push db
Pushing db (127.0.0.1:5000/postgres:latest)...
The push refers to repository [127.0.0.1:5000/postgres]
latest: digest: sha256:dccccdbdfxxxxxxxcb1e5b3a8a size: 3877

docker stack deploy base --compose-file docker-compose.swarm.yml

Я вижу, что служба построена:

docker service ls
lobelr1vzj8l        base_db                replicated          1/1                 127.0.0.1:5000/postgres:latest

журналы контейнеров:

docker service ps --no-trunc base_db

ltujcwnx9m2v61hjuqtph6d7s   base_db.1           127.0.0.1:5000/postgres:latest@sha256:dccccdbdfafeb505b7ab349b21f4a580857c3cd51965cd36f81269cb1e5b3a8a   swarm-manager       Ready               Ready 4 seconds ago


docker service logs base_db
    psql:/docker-entrypoint-initdb.d/postgres.sql:1: ERROR:  could not open extension control file "/usr/share/postgresql/12/extension/postgis.control": No such file or directory

Проблема в том, что контейнер на самом деле не собирается с помощью этой команды в Dockerfile "RUN apt-get install -y postgis"

Если я перехожу кКонтейнер и команды запуска вручную, он работает, а также показывает, что расширение никогда не было установлено ранее.

Почему это так? Спасибо.

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Решение менялось в "docker-compose.swarm.yml" в образе службы db:

От:

 image: 127.0.0.1:5000/postgres

До:

 image: 127.0.0.1:5000/postgres:latest

Сначала я сделал все эти проверки, чтобы убедиться, что мое изображение было зарегистрировано в моем локальном реестре:

curl localhost:5000/v2/_catalog
{"repositories":["postgres"]}

localhost:5000/v2/postgres/tags/list
{"name":"postgres","tags":["latest"]}

curl localhost:5000/v2/postgres/manifests/latest

{
   "schemaVersion": 1,
   "name": "postgres",
   "tag": "latest",
   "architecture": "amd64",
   "fsLayers": [
      {
         "blobSum": "sha256:a3ed95caeb02ffe68cdd9fd8440668xxxx0e8a7c22955b46d4"...

И поэтому я решил, что оно может быть выдано как самое последнее, и поэтому изображение в Dockerfile должно быть.

РЕДАКТИРОВАТЬ:

Еще один обходной путь, который я использовал, меняется в dockerfile

FROM postgres

на

FROM postgres:11.5

, а затем в yml-файле:

image: 127.0.0.1:5000/postgres:11.5

По какой-то причине последние сделали проблемы для меня.

0 голосов
/ 15 октября 2019

У меня такое ощущение, что вы дали -y cmd не в том месте. Я только что построил это изображение, и оно построено успешно. Если вы хотите конкретную версию postgres, укажите ее вместо latest , отметьте здесь

Dockerfile

FROM postgres:latest
RUN apt-get update -y
RUN apt-get install postgis -y

Вывод

docker image ls
REPOSITORY                       TAG                 IMAGE ID            CREATED             SIZE
postgis                          latest              eef15fa83f2f        2 minutes ago       645MB
...