#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. Я собираюсь опубликовать полное объяснение моего решения, чтобы оно могло помочь другим людям. Тем не менее, ваш ответ дал бы мне решение, я думаю.