#docker #docker-compose #gitlab
# #docker #docker-compose #gitlab
Вопрос:
У меня есть dockerimage в реестре gitlab. когда я (после входа в систему на целевой машине)
docker run -d -p 8081:8080/tcp gitlab.somedomain.com:5050/root/app
приложение laravel доступно, запущено и доступно. Такие вещи, как php artisan config:clear
работают. когда я вхожу в контейнер, все выглядит нормально. Но у меня нет запущенных служб. Итак, у меня возникла идея создать файл yml docker-compose run
, чтобы настроить все в docker-compose-gitlab.yml
version: '3'
services:
mysql:
image: mysql:5.7
container_name: my-mysql
environment:
- MYSQL_ROOT_PASSWORD=***
- MYSQL_DATABASE=dbname
- MYSQL_USER=username
- MYSQL_PASSWORD=***
volumes:
- ./data/mysql:/var/lib/mysql
ports:
- "3307:3306"
application:
image: gitlab.somedomain.com:5050/root/app:latest
build:
context: .
dockerfile: ./Dockerfile
container_name: my-app
ports:
- "8081:8080"
volumes:
- .:/application
env_file: .env.docker
working_dir: /application
depends_on:
- mysql
links:
- mysql
вызов docker-compose --verbose -f docker-compose-gitlab.yml up
показывает мне, что служба mysql создана и работает, приложение, похоже, также создано, но затем завершается сбоем… выход с кодом 0 — дальнейшего сообщения нет.
Если я добавляю команды в свой yml, php artisan config:clear
ошибка становится еще более непонятной для меня: он говорит, что не может найти artisan
, и кажется, что команда выполняется вне контейнера… выход с кодом 1. (artisan является помощником и выполняется через php)
Когда я вызываю docker-compose с -d
помощью, а затем делаю docker ps
, я вижу только запущенный mysql, но не приложение.
Когда я использую обе стратегии, проблема в том, что два контейнера не имеют общей сети и поэтому не могут работать вместе.
Что я пропустил? Это неправильная стратегия?
Комментарии:
1.
my-app
Как вы пытаетесь подключиться из внутреннего контейнераmy-mysql
в этих 2 разных стратегиях? Здесь есть две ошибки: (1) нет связи между разными сетями (default bridge
автоматически используетсяdocker run ...
/user-defined
автоматически создается мостомdocker-compose up
) и (2) неправильное использованиеlocalhost:[your_published_port]
)2. @tgogos можете ли вы уточнить свой вопрос? Я не уверен, что вы имеете в виду. Вся настройка базовой конфигурации yml работала нормально локально.
Ответ №1:
Проблема в том, что я оставляю директиву volume, которая перезаписывает мое приложение entier с пустым каталогом.
Вы можете просто оставить это.
version: '3'
services:
mysql:
image: mysql:5.7
container_name: my-mysql
environment:
- MYSQL_ROOT_PASSWORD=***
- MYSQL_DATABASE=dbname
- MYSQL_USER=username
- MYSQL_PASSWORD=***
volumes:
- ./data/mysql:/var/lib/mysql
ports:
- "3307:3306"
application:
image: gitlab.somedomain.com:5050/root/app:latest
build:
context: .
dockerfile: ./Dockerfile
container_name: my-app
ports:
- "8081:8080"
## volumes:
## - .:/application ## this would overwrite the app
env_file: .env.docker
working_dir: /application
depends_on:
- mysql
links:
- mysql
Ответ №2:
Вы можете отладить сеть контейнеров, в которых перечислены сети docker network ls
, а затем, когда будет показан список, проверить сеть compose с docker inspect <ComposeNetworkID>
помощью, как только вы убедитесь, что ваши службы не находятся в одной сети, удалите свои контейнеры и воссоздайте их снова с помощью docker-compose -f docker-compose-gitlab.yml up
Если вы заметили, что они находятся в одной сети, попробуйте использовать имя контейнера вместо localhost, чтобы связаться друг с другом, если это так.
Комментарии:
1. Эта команда не создается сразу. Это основная проблема. Значит, они никогда не будут в одной сети, пока я использую два вызова для создания двух контейнеров, верно? Пожалуйста, прочитайте мою проблему еще раз 🙂