Как изменить Dockerfile с существующим ENTRYPOINT, чтобы добавить «wait-for-it.sh»? - PullRequest
0 голосов
/ 04 октября 2019

Я бы хотел изменить образ Docker wrouesnel/postgres_exporter таким образом, чтобы он мог использоваться в многоконтейнерном приложении Docker Compose и ожидал, пока Postgres примет соединения. Мой проект имеет следующую структуру:

.
├── docker-compose.yml
└── exporter
    ├── Dockerfile
    └── wait-for-it.sh

где docker-compose.yml читает

version: "3"
services:
  db:
    image: postgres
    environment:
      POSTGRES_PASSWORD: mypassword
    networks:
      - mynetwork

  exporter:
    build: exporter
    environment:
      DATA_SOURCE_NAME: "postgresql://postgres:mypassword@db:5432/postgres?sslmode=disable"
    ports:
      - "9187:9187"
    networks:
      - mynetwork

networks:
  mynetwork:

и wait-for-it.sh получается из https://github.com/vishnubob/wait-for-it/blob/master/wait-for-it.sh, и Dockerfile читает

FROM wrouesnel/postgres_exporter
COPY wait-for-it.sh wait-for-it.sh
ENTRYPOINT ["./wait-for-it.sh", "db:5432", "--", "./postgres_exporter"]

Однако, если я docker-compose build и пытаюсь docker-compose up, я получаю следующую ошибку:

> docker-compose up
Recreating postgres-performance-testing_exporter_1 ... 
Recreating postgres-performance-testing_exporter_1 ... done
Attaching to postgres-performance-testing_db_1, postgres-performance-testing_exporter_1
exporter_1  | standard_init_linux.go:211: exec user process caused "no such file or directory"

Я не понимаю, какой файл он не находит и почемуне? Разве оба не скопированы на мой WORKDIR?

1 Ответ

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

Вы не можете запустить скрипт bash в wrouesnel/postgres_exporter образе как wait-for-it.sh , так как wait-for-it полностью основан на bash.

, если вы посмотритев Dockerfile wrouesnel с нуля, и на этом изображении вообще ничего нет.

FROM scratch
ARG binary
COPY $binary /postgres_exporter
EXPOSE 9187
ENTRYPOINT [ "/postgres_exporter" ]

Так что взломать такое изображение - это использовать его как многоступенчатое изображение ископируйте двоичные файлы и увеличьте изображение.

FROM wrouesnel/postgres_exporter 

FROM debian:7.11-slim
RUN useradd -u 20001 postgres_exporter
USER postgres_exporter
COPY --from=0 /postgres_exporter /postgres_exporter
EXPOSE 9187
COPY wait-for-it.sh wait-for-it.sh
USER root
RUN chmod +x wait-for-it.sh
USER postgres_exporter
RUN pwd
ENTRYPOINT ["./wait-for-it.sh", "db:5432", "--", "./postgres_exporter"]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...