How docker compose push?
Добрый!
Хочу отправить свой docker compose (nginx,php,mysql) на hub.docker.com : сделал пустой реп, внес корр в docker-compose.yml( 3 одинаковых image). В результате получилось 1 image и 3 контейнера. Порты слушаются (скрин) .Можно делать docker tag и docker push. Но проблема - curl localhost не отображает страницу php( как было раньше-3 образа и 3 контейнера). Чего делать? Мой yml:
version: '3.7' services: #Контейнер с PHP, назовём его app app: # Если нет секции build, то система будет искать образ в build: ${PWD}/fpm/ # имя будущего образа image: cubinez85/docker_compose/web:latest # имя контейнера после запуска container_name: app # монтируемая папка в контейнер volumes: - ${PWD}/code:/data # мы можем создать для контейнеров внутреннюю сеть networks: - app-network #контейнер с Nginx webserver: build: ${PWD}/nginx/ image: cubinez85/docker_compose/web:latest container_name: webserver volumes: - ${PWD}/code:/data # проброс портов ports: - "80:80" - "443:443" networks: - app-network # контейнер с MySQL # строим на базе стандартного образа db: image: cubinez85/docker_compose/web:latest container_name: db ports: - "3306:3306" # описываем, какую БД мы создаем environment: MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} volumes: - ${PWD}/dbdata:/var/lib/mysql networks: - app-network #Docker Networks networks: app-network: driver: bridge> |
version: '3.7' services: #Контейнер с PHP, назовём его app app: # Если нет секции build, то система будет искать образ в build: ${PWD}/fpm/ # имя будущего образа image: cubinez85/docker_compose/web:latest # имя контейнера после запуска container_name: app # монтируемая папка в контейнер volumes: - ${PWD}/code:/data # мы можем создать для контейнеров внутреннюю сеть networks: - app-network #контейнер с Nginx webserver: build: ${PWD}/nginx/ image: cubinez85/docker_compose/web:latest container_name: webserver volumes: - ${PWD}/code:/data # проброс портов ports: - "80:80" - "443:443" networks: - app-network # контейнер с MySQL # строим на базе стандартного образа db: image: cubinez85/docker_compose/web:latest container_name: db ports: - "3306:3306" # описываем, какую БД мы создаем environment: MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} volumes: - ${PWD}/dbdata:/var/lib/mysql networks: - app-network #Docker Networks networks: app-network: driver: bridge>
Дополнительно:
1.Использование одного образа для разных сервисов: В вашем файле docker-compose.yml все три сервиса (app, webserver и db) используют один и тот же образ cubinez85/docker_compose/web:latest. Это неправильно, так как каждый из этих сервисов должен иметь свой образ, настроенный для конкретной задачи.
2.Конфигурация NGINX: Если ваш NGINX не настроен правильно, он не сможет перенаправлять запросы на PHP контейнер. Вам нужно удостовериться, что конфигурация NGINX правильно перенаправляет запросы на fastcgi_pass адрес вашего PHP контейнера.
3.Настройка PHP-FPM: Убедитесь, что PHP-FPM в вашем app контейнере настроен для прослушивания соединений (обычно это делается с помощью listen = 9000 в файле www.conf).
Измените docker-compose.yml:
version: '3.7' services: app: build: ${PWD}/fpm/ image: cubinez85/docker_compose/app:latest container_name: app volumes: - ${PWD}/code:/data networks: - app-network webserver: build: ${PWD}/nginx/ image: cubinez85/docker_compose/nginx:latest container_name: webserver volumes: - ${PWD}/code:/data ports: - "80:80" - "443:443" networks: - app-network db: image: mysql:latest container_name: db ports: - "3306:3306" environment: MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} volumes: - ${PWD}/dbdata:/var/lib/mysql networks: - app-network networks: app-network: driver: bridge |
version: '3.7' services: app: build: ${PWD}/fpm/ image: cubinez85/docker_compose/app:latest container_name: app volumes: - ${PWD}/code:/data networks: - app-network webserver: build: ${PWD}/nginx/ image: cubinez85/docker_compose/nginx:latest container_name: webserver volumes: - ${PWD}/code:/data ports: - "80:80" - "443:443" networks: - app-network db: image: mysql:latest container_name: db ports: - "3306:3306" environment: MYSQL_DATABASE: ${MYSQL_DATABASE} MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD} volumes: - ${PWD}/dbdata:/var/lib/mysql networks: - app-network networks: app-network: driver: bridge
Убедитесь что в nginx.conf есть что-то вроде:
location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass app:9000; ... } |
location ~ .php$ { fastcgi_split_path_info ^(.+.php)(/.+)$; fastcgi_pass app:9000; ... }
Здесь app:9000 указывает на ваш PHP контейнер и порт 9000, который слушает PHP-FPM.
- Спасибо за корр!
Но я сделал 3 одинаковых images чтобы после docker-compose up -d я имел 1 image,
у меня задача сделать push на docker hub. Как это сделать,если будут 3 образа? - cubinez85, на неправильный вопрос невозможно получить правильный ответ
- сергей кузьмин,
Хорошо! Вопрос такой : как сделать push 3 образов на docker hub? - сергей кузьмин, в один реп?
- готов оплатить услугу
- образы можно загружать только по одному .
три разаdocker login docker tag <SOURCE_IMAGE><:TAG> <USERNAME>/<TARGET_IMAGE>:<TARGET_TAG> docker push <USERNAME>/<TARGET_IMAGE>:<TARGET_TAG>
docker login docker tag <SOURCE_IMAGE><:TAG> <USERNAME>/<TARGET_IMAGE>:<TARGET_TAG> docker push <USERNAME>/<TARGET_IMAGE>:<TARGET_TAG>
- Спасибо!
Понял!
Создаешь свой аккаунт на докер хаб. Создаешь репозиторий в аккаунте - типа my_docker_images.
Заходишь на свой терминал и выполняешь команды
docker tag <my_docker_image_id> <username_for_hub>/my_docker_images:latest docker login docker push <username_for_hub>/my_docker_images:latest |
docker tag <my_docker_image_id> <username_for_hub>/my_docker_images:latest docker login docker push <username_for_hub>/my_docker_images:latest
вместо latest можешь использовать например master-1 или любой другой тег. Dokcer image id можешь найти через команду docker images
Если помог, переведи деньги детишкам лучше https://rusfond.ru/
- используйте разные теги для каждого образа, ну или 3 разных репо сделайте?
- Всем спасибо!
Все понял!
Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.
Пока нет других ответов. Будьте первым, кто поможет автору.
Ответить на вопрос

To push a Docker Compose configuration to a remote repository, you can follow these steps:
1. Make sure you have Docker Compose installed on your local machine. You can check this by running the following command in your terminal:
docker-compose --versiondocker-compose --version
2. Log in to the Docker Hub or any other container registry where you want to push your Docker Compose configuration. You can log in using the following command:
docker logindocker login
3. Create a Docker Compose file (usually named docker-compose.yml) that defines your services, networks, and volumes.
4. Build your Docker images using the following command:
docker-compose build
5. Tag your Docker images with the repository name and version. You can do this using the following command:
docker tag :
6. Push your Docker images to the remote repository using the following command:
docker push :
7. Finally, you can push your Docker Compose configuration file to the remote repository. This can be done by pushing the entire directory containing the docker-compose.yml file to the repository.
By following these steps, you will be able to push your Docker Compose configuration to a remote repository successfully. Remember to replace , , and with your actual values.