docker-создание с использованием точки входа из неправильной папки

#docker #docker-compose #dockerfile

#докер #docker-создать #докерфайл

Вопрос:

Я уже довольно давно бьюсь головой об эту проблему.

Я постараюсь как можно яснее объяснить ситуацию, в которой я нахожусь.

У меня есть два разных проекта.

Первый проект имеет это docker-compose.yml :

 version: "3.7"

services:
  spaceflights-backend-database:
    hostname: spaceflights-database-host
    image: postgres
    restart: always
    environment:
      POSTGRES_PASSWORD: jBmfXzQKEck8TQco
      POSTGRES_USER: spaceflights
      POSTGRES_DB: spaceflights
  spaceflights-backend-application:
    build:
        context: ./application
        dockerfile: Dockerfile
    hostname: spaceflights-application-host
    image: spaceflights/backend-application
    working_dir: /home/node/spaceflights-application
    volumes:
      - "../filesystem:/home/node/spaceflights-application"
    ports:
      - 3000:3000
    depends_on:
      - spaceflights-backend-database
 

Вот содержимое файла Dockerfile:

 FROM node:latest

ENV COMPOSE_RPOJECT_NAME=spaceflights-frontend

RUN apt-get update amp;amp; apt-get install -y --no-install-recommends 
    nano 
    screen 
    htop 
    bash 
    dumb-init 
    postgresql

# Entrypoint
COPY . /docker-files/
RUN chmod  x /docker-files/docker-entrypoint.sh
ENTRYPOINT ["/usr/bin/dumb-init", "--", "/docker-files/docker-entrypoint.sh"]

CMD ["bash", "-c", "node src/app.mjs"]

 

Вот docker-entrypoint.sh :

 #!/bin/bash
set -euo pipefail

echo 'Installing packages'

yarn install

echo 'Setting up database data'

node initialization/setup.mjs

exec "$@"

 

Структура папок:

введите описание изображения здесь

Этот проект работает как шарм, никаких жалоб, все на высшем уровне.

У меня есть этот второй проект:

docker-compose.yml :

 version: "3.7"

services:
  spaceflights-frontend-main:
    container_name: spaceflights-frontend-main
    image: spaceflights/frontend-main
    build:
        context: ./application
        dockerfile: Dockerfile
    environment:
      REACT_APP_HOST: vagrant-docker
      REACT_APP_PORT: 8080
      REACT_APP_API_HOST: vagrant-docker
      REACT_APP_API_PORT: 3000
    hostname: spaceflights-frontend-application
    working_dir: /home/node/spaceflights-application
    volumes:
      - "../filesystem:/home/node/spaceflights-application"
    ports:
      - 8080:8080

 

Dockerfile:

 FROM node:latest

RUN apt-get update amp;amp; apt-get install -y --no-install-recommends 
    nano 
    bash 

RUN yarn install
RUN yarn global add serve

CMD ["bash", "-c", "serve -l ${REACT_APP_PORT} -s build > /dev/null"]

 

Нет docker-entrypoint.sh здесь.

Структура папок:

введите описание изображения здесь

После остановки и удаления каждого отдельного контейнера, что означает docker container ls возврат пустого списка, и попытки запустить этого парня, по какой-то причине, недоступной моему пониманию, он выполняет docker-entrypoint.sh из первого проекта.

Я пробовал несколько вещей:

  • Использование a .env : Это ничего не меняет.
  • Использование docker-compose -p ... для определения имени проекта не помогает.
  • Удаление всего container_name , что находится внутри docker-compose.yml . По-прежнему не работает.
  • Переименование docker папки в две разные вещи в каждом проекте. Ничего хорошего.
  • Различные комбинации всего вышеперечисленного.

Я запускаю оба проекта, используя одну и ту же команду: docker-compose up -d --build .

Я действительно невежественен здесь, я просто не понимаю, почему это так запутано. Проекты даже не находятся в одной папке (очевидно, учитывая структуру каталогов), и я запускаю docker-compose up -d --build в этой docker папке.

Любая помощь будет очень признательна!

<3

Комментарии:

1. В какой-то момент было ли docker-compose.yml указано и build: то, и другое, а также image: node ? Если вы docker pull node:latest хотите получить текущую версию из Docker Hub, улучшит ли это ситуацию?

2. Спасибо за ваш ответ @DavidMaze, я действительно нашел решение в эти выходные. Оказывается, когда вы указываете image: , это означает, что вы хотите создать образ с этим именем, а не использовать этот образ. Мне пришлось снова вытащить образ моего узла, а затем переработать мой Dockerfile. Я собираюсь опубликовать полное объяснение моего решения, чтобы оно могло помочь другим людям. Тем не менее, ваш ответ дал бы мне решение, я думаю.