Remote docker http request - php

I have 2 computers running on the same network as following
Macbook Pro M1 (Monterey)
Acts as Client (Guest)
Docker version 20.10.12, build e91ed57
Docker Compose version v2.2.3
Lenovo (Ubuntu 21.04)
Local IP: 192.168.0.63
Acts like Host (host all my docker containers)
Docker version 20.10.7, build 20.10.7-0ubuntu5~21.04.2
docker-compose version 1.29.2, build 5becea4c
Because docker is super slow on Mac, and i am a Mac guy, i wanted to host my containers on Ubuntu and make all development and the http api request from Mac.
So on Ubuntu: i setup all my docker containers
And on Mac: i set: export DOCKER_HOST=192.168.0.63
When i run on my Mac:
docker ps : I can successfully list the the container from Ubuntu.
docker context ls : I get Current DOCKER_HOST based configuration tcp://192.168.0.63:2375
But when i try to make http request e.g
http://ucp.mydomain.localhost/api/v1/users/login
it failed
Letting you know that i have many container and all each has a vhost.
127.0.0.1 ucp.mydomain.localhost
127.0.0.1 checkout.mydomain.localhost
127.0.0.1 merchant.mydomain2.localhost
127.0.0.1 admin.mydomain3.localhost
127.0.0.1 core.mydomain3.localhost

Related

Error with URL after Shopware Docker install

I am trying to use Shopware 6 (6.2.0_1589874223) in a Docker (Ubuntu 20.04) container. The installation was successful. Now though all the urls are wrong. They have localhost added to their link, i.e. http://localhost:8080/http://localhost:8080/index.php/account/login
There is one localhost too much. My guess is that it first adds a http://localhost:8080 inside the container and then again outside. Assuming this is right, I would believe that the server name has to be set somewhere.
From the technical perspective I just installed Apache2, MySQL and PHP inside the container and then copy and run the contents of install_6.2.0_1589874223.zip (Community Edition downloaded from the Shopware site) in /var/www/html. I then expose the port 80 from the container and then run the container using this command:
docker run -d -p 8080:80 --name shopware-test -i myshopware/shopware-test:0.0.1

How to access mysql datadir folder of host machine through docker centos container

I am using docker on windows 10 pro and I installed the following
centos
mysql
nginx
The container inside docker and mysql databases is also installed on my host machine.
Now I want to access the datadir folder of host's mysql database from docker centos
container
Map both containers to the same host-volume and both containers should be able to see the data stored there.
Create your volume:
https://docs.docker.com/engine/admin/volumes/volumes/#create-and-manage-volumes
docker volume create mysqldata
Start your containers mapped to the volume: https://docs.docker.com/engine/admin/volumes/volumes/#start-a-container-with-a-volume
docker run -d --mount source= mysqldata,target=/var/lib/mysql mysql
docker run -d --mount source= mysqldata,target=/var/lib/mysql centos

Using Docker Nginx, PHP, MySQL on Mac

I'm just starting to get my head around docker and want to use it for a project.
I have followed https://docs.docker.com/docker-for-mac/#explore-the-application-and-run-examples and have NGINX running fine and can see the NGINX landing page.
Do I need to install php-fpm and mySQL within my container since my container is only NGINX at this stage?
How do I configure my project on a custom domain e.g. project.dev. Do I need to edit an entry in /etc/hosts for 127.0.0.1 project.dev and then listen for that URL in an NGINX config?
Lastly do I need a dockerfile? I already have my container up and my understanding is a dockerfile is only for defining your container?
An example of a dockerfile for NGINX, PHP and mySQL would be helpful to look at as well.
Thanks
No, this guide just show using nginx container in docker. But I see the container don't have php installed. And you cannot install php-fpm inside this container.
So, if you want to use nginx, php, and MySQL using docker you should pull:
Container which run Nginx + PHP-FPM (I recommend this image https://hub.docker.com/r/richarvey/nginx-php-fpm/)
Container run MySQL (https://hub.docker.com/_/mysql/)
Download images
docker pull richarvey/nginx-php-fpm
docker pull mysql:5.6
Run MySQL Instance. Name it mysql56, and expose using port 3360
docker run -tid -p 3360:3306 --name mysql56 -e MYSQL_ROOT_PASSWORD=123456 -v /root/docker/mysql56/data/mysql:/var/lib/mysql -d mysql:5.6
Run Nginx PHP+FPM instance. Link it to MySQL Instance, and name it project-dev
docker run -tid --name project-dev --link mysql56:mysql -v $(pwd):/var/www/html -p 8888:80 richarvey/nginx-php-fpm:latest
Run docker ps -a to see the running containers.
To make nginx can be accessed with address project.dev, just map it on /etc/hosts. Then access it on web browser http://project.dev:8888
Note:
-v /root/docker/mysql56/data/mysql:/var/lib/mysql it mean I have /root/docker/mysql56/data/mysql on my mac, and map it to /var/lib/mysql in mysql56 container. So all mysql data will be backup on my local data, and will not lose when I remove the container.
-v $(pwd):/var/www/html mean your current directory will be mapped to
container. So, whatever you write in this directory will be exist on
/var/www/html container.
I use port 8888 to avoid conflict with existing web server, you can
change it as you want

Error starting userland proxy: listen tcp 0.0.0.0:3306: bind: address already in use

I have to make Laravel app and to deliver a Dockerfile, but I'm really stuck with this. Before that I had a nightmare wile installing laravel on my machine.
I'm trying to get dockervel image and following the steps here:
http://www.spiralout.eu/2015/12/dockervel-laravel-development.html
But when I run dartisan make:auth it gives this error below:
**ERROR:** for dockervel_mysql_1 **Cannot restart container** c258b418c03cbd6ec02c349c12cf09403f0eaf42fa9248019af7860d037d6474: **driver failed programming external connectivity on endpoint dockervel_mysql_1** (da3dd576458aa1fe3af7b539c48b9d61d97432cf5e9ee02d78562851f53981ae): E**rror starting userland proxy: listen tcp0.0.0.0:3306: bind: address already in use.**
I have tried to Change the default port in the docker-compose.yml
ports:
- "8084:80"
Still nothing, also tried to stop apache2 (service apache2 stop) on my machine ,also tried docker-compose restart and removing docker container dockervel_mysql_1.
I have to mention that I have already one Laravel proj. in /var/www/laravel.
Please help!
I had the same problem and
sudo netstat -nlpt |grep 3306
showed me the PID and which service it was started by (mysgld). Whenever I tried to kill the PID then it was started again. But the problem was fixed when I stopped the service by
sudo service mysql stop
Notice that you will have to use mysql and not mysqld.
I hope that this will do it for you - I was able to run docker-compose up without any problems
Try to kill all the processes using the port 3306:
sudo kill `sudo lsof -t -i:3306`
Then, run your docker containers:
sudo docker-compose up
Probably you have already a MySQL service running in port 3306. You should close it first.
Then try to end docker-compose down and restart it with docker-compose up.
Remember also to change the permissions after you add a file in your project (like dartisan make:auth) with dpermit
UPDATE:
since you have changed the port to "8084" you should go to localhost:8084
If you see the apache default then you probably are browsing another server since dockervel is build upon nginx.
You have also probably have some gaps on Docker. Don't mix your local storage with docker storage. /var/www in a container is different than your local /var/www. in docker-compose.yml you mount the local ~/dockervel/www to containers /var/www.
I would suggest that you start all over again and revert the changes you've made to your apache server. Shut it down, you don't need it. Dockervel will provide you with an NginX server in a container.
My fix for this issue was to go into
docker-compose.yml
and change
ports: -3306:3306 to ports: -3307:3306
then run this command again:
docker-compose up
On Ubuntu, running this command will stop your mysql from running for your docker container to work:
sudo service mysql stop
Then, if your apache2 is running, you need to stop the service especially when you want to work with nginx:
sudo service apache2 stop
Then, you can run your docker-compose up -d ... command
So for me when I was trying to load and run MySQL image in docker container, I was getting the same error:
And even after stopping local mysql server in system preferences didn't help:
Cause the port 3306 was used by my tomcat server, so basically you have to make sure the port (in this case 3306) that the docker command wants to use should not be in use by any other service otherwise the command will fail
First Solution :
sudo service mysql stop
and then run
docker-compose up
to start the application , It is an quick and fast solution to run this mysql stop command to stop the current MySQL service on port 3306 port so the same port can be available for your docker application.
Scenario 1 : Problem will come when you want to run both application one which was running previously and next you want to run now at this time it won't work.
Second Solution to Scenario 1:
If your next/current application coming from docker then try below it will work without disturbing first application mysql service of 3306 port
Open and changed the MySQL port from docker-compose.yml file
Default configuration
ports:
- ${SERVER_PORT_DB:-3306}:3306
changed port
ports:
- ${SERVER_PORT_DB:-3307}:3306
and now run below command to start the application
docker-composer up
The error you are seeing is from a local mysql instance listening on port 3306 (currently on pid 1370 from your comments). You won't be able to run a container that publishes on this host port while it's already in use by another process. Solutions are to either stop mysql on the local host, or to change/remove the published port in your container. If the port is only needed by other containers, you can leave it unpublished and they can communicate directly on the docker private network (by default, this is "bridge").
This option did it for me:
sudo pkill mysql
You need to change the mysql port
because you are installing mysql on your machine and it takes the default port 3306
and now you are trying to make dockervel_mysql_1 run to the same port 3306 , this is why you see in the error "Address already in use"
so if you change dockervel_mysql_1 port to 3307 for example it will works fine , without stopping the mysql that is running on you machine
Running this command fixed the issue for me:
docker swarm leave --force
Explanation:
I had started docker swarm service as a master node in my localhost.
Swarm was taking network priority and making use of this ports already
If tomcat is running on your machine which is connected to MySQL 3306 port then check by killing the tomcat first and then trying to do docker-compose up.
I used two different versions of MySQL, MySQL 5 on my local machine and 8 on docker. So when your connected to mysql5 on 3306 in tomcat and if you just stop the mysql5, then the process isn't completed yet since tomcat is still connected to 3306. Kill the tomcat and then up the docker it should work.
Happy coding!!
I know this question has been quite old but someone still looking for answers. You don't have to run any kill command instead you can use docker --remove-orphans flag and it will clean it up for you. For example
docker-compose up -d --build --remove-orphans
This worked for me, just changed the app's port to 8084:80, like described here.

Enter docker container from host using docker-machine

How can I connect to Php container from my Windows machine?
I run docker toolbox https://www.docker.com/products/docker-toolbox on my Windows 10 machine. It's create docker-machine (env default) using virtualbox on port tcp://192.168.99.100:2376 and from host machine (Windows) I can connect to it by ssh. Inside docker-machine I run containers with docker-compose.
I run PhpStorm on Windows and I want to configure PHP interpreter to listen to containerized php. I have read https://confluence.jetbrains.com/display/PhpStorm/Working+with+Remote+PHP+Interpreters+in+PhpStorm but still no sure how to configure it.
I found http://obrown.io/2015/12/23/phpunit-docker-phpstorm.html
The goal create local php script and somehow provide in it connection to php.
In the example author create new container and execute/link php there
End of "docker-machine env default" output
/usr/local/bin/docker run -i --rm -v "${PWD}":"${PWD}" -w ${PWD} --net=host --sig-proxy=true --pid=host originalbrownbear/php:7-cli-phpunit php "$#"
How can I configure such script to use existing docker container with php?
Nornally I enter running container - docker exec -it container_tag_name /bin/bash
And there I can execute php.

Categories