Laravel docker deploy - laravel

I have a Laravel project where we integrate create container with docker.
I'm using the SSH plugin for laravel to SSH.
I'm trying to execute the follow code:
SSH::into('production')->run([
'docker run --expose '.$port.' --expose '.$rpcport.' --name '.$nodeName.' -i cimage:latest bash',
'docker start '.$nodeName,
'docker exec -i -t '.$nodeName.' mkdir /usr/local/bin/test',
]);
The node create perfect and start good.
Problem is the next commands not executing or something in the command is not good.
Can someone help me to get this solve?

It works with execute the commands separate like:
SSH::into('production')->run([
'docker run --expose '.$port.' --expose '.$rpcport.' --name '.$nodeName.' -i cimage:latest bash',
]);
SSH::into('production')->run([
'docker exec -i -t '.$nodeName.' mkdir /usr/local/bin/test',
]);

Related

Docker Oracle DB container : error response from daemon no command specified

Hello I hope you all doing good please im trying to create a container for a DB and i have this error :
error response from daemon no command specified
this is my command
docker create --name soadb --hostname=bbddsoa --network=soadevNET -p 1521:1521 -p 5500:5500 -e TZ=Europe/Madrid -v %cd%\DBVolume:/ORCL --env-file %cd%\db.env.list -it --shm-size="8g" soadb:v0.3
i know at the end of the command i should add a command but i dont know what
thank you in advance .

How to stop and start Docker container from bash script Synology?

Hey guys so I'm on a synology DS218+ and I'm running docker and hosting my own instance of gitlab in it.
So now I'm trying to write an update Script with bash.
docker stop gitlab_td3v
rm -rf /volume1/docker/"gitlab"
rm -rf /volume1/gitlab/"gitlab_backup.rb"
cp -r /volume1/gitlab /volume1/docker/"gitlab"
cp /volume1/gitlab/config/gitlab.rb /volume1/gitlab/"gitlab_backup.rb"
docker rm -f gitlab_td3v
docker pull gitlab/gitlab-ee:latest
docker run --detach --hostname Myhost.name --name gitlab_td3v --publish ..:.. --publish ..:.. --publish ..:.. --restart always --volume /volume1/gitlab/config:/etc/gitlab --volume /volume1/gitlab/data:/var/opt/gitlab --volume /volume1/gitlab/logs:/var/log/gitlab gitlab/gitlab-ee:latest
The problem I have now as you can see in the image I'm trying to stop and remove the container but It doesn't recognise it's name, but if I echo docker ps in the file it gives me the container with the name I used in the file.
CLI
Also when I just run the commands in the bash shell it works only as soon as I try to run the file it doesn't work and now I'm really confuse cause I made sure I'm on the same user on the same shell and everything and that I am but in the file it won't let me select the container over the name or the id I get from docker ps.
So now the question I guess is did anyone have the same problem or does anyone know a fix for it?
Would really appreciate it thanks.
The script must be executed as root.
docker stop CONTAINERNAME
CONTAINERNAME is definied by value "NAME"
See by
docker stats

Get the name of running docker container inside shell script

I am currently developing an application, in which I want to automate a testing process to speed up my development time. I use a postgres db container, and I then want to check that the preparation of the database is correct.
My process is currently as follows:
docker run -p 5432:5432 --env-file=".db_env" -d postgres # Start the postgres db
# Prep the db, do some other stuff
# ...
docker exec -it CONTAINER_NAME psql -U postgres
Currently, I have to to docker ps to get the container name and then paste it and replace CONTAINER_NAME. The container is the only one running, so I am thinking I could easily find the container id or the container name automatically instead of using docker ps to manually retrieve it, but I don't know how. How do I do this using bash?
Thank you!
The container id is being returned from the docker run command:
CONTAINER_ID=$(docker run -p 5432:5432 --env-file=".db_env" -d postgres)
You can choose the name of your container with docker run --name CONTAINER_NAME.
https://docs.docker.com/engine/reference/run/#name---name
You can get its ID using:
docker ps -aqf "name=postgres"
If you're using Bash, you can do something like:
docker exec -it $(docker ps -aqf "name=postgres") psql -U postgres
In the end, I took use of #mrcl's answer, from which I developed a complete answer. Thank you for that #mrcl!
CONTAINER_ID=$(docker run -p 5432:5432 --env-file=".db_env" -d postgres)
# Do some other stuff
# ...
docker exec -it $CONTAINER_ID psql -U postgres

Jenkins console does not show the output of command runs on docker container

Running below command to execute my tests on docker container
sudo docker exec -i 6d49272f772c bash -c "mvn clean install test"
Above command running on Jenkins execute bash. But Jenkins console does not show the logs for test execution.
I had a similar problem with docker start (which is similar to docker exec). I used the -i option and it would work fine outside Jenkins, but the console in Jenkins didn't show any output from this command. I replaced -i with -a similar to the following:
sudo docker container create -it --name container-name some-docker-image some-command
sudo docker container start -a container-name
sudo docker container rm -f container-name
The docker exec method doesn't have a -a option so possibly removing the -i option would work too (since you are not interacting with the container in Jenkins), so if that doesn't work than you can convert to the following commands and achieve similar results with standard out being captured.

Run bash command before running container

I want to run a pre-existing Docker image like so:
docker run -d --name cdt-selenium selenium/standalone-firefox:3.4.0-chromium
So there is no Dockerfile that I control for this image. However, I would like to copy some files into this container.
If I did control the Dockerfile, I would like to run these commands:
RUN mkdir -p /root/cdt-tests/csv-data
COPY ./csv-data/* /root/cdt-tests/csv-data
Is there a way to run those commands in the same line as the Docker run command above?
I tried this:
docker run -d --name cdt-selenium selenium/standalone-firefox:3.4.0-chromium
docker exec cdt-selenium mkdir -p /root/cdt-tests/csv-data
docker cp cdt-selenium:/root/cdt-tests/csv-data ./csv-data
but I get a permissions error on the docker exec line
All images have a FROM line, and that can be any other image. So you can make a Dockerfile with:
FROM selenium/standalone-firefox:3.4.0-chromium
USER root
RUN mkdir -p /root/cdt-tests/csv-data
COPY ./csv-data/* /root/cdt-tests/csv-data
USER seluser
that will build your own image with your commands run.
You'd build it and create your own tag:
docker build -t alexander/selenium:3.4.0-chromium .
And then run it:
docker run -d --name cdt-selenium alexander/selenium:3.4.0-chromium
Edit: the exec command you ran failed because docker runs this container as a different user. You can see that in their Dockerfile. To solve that, run the exec with the root user option (-u root):
docker exec -u root cdt-selenium mkdir -p /root/cdt-tests/csv-data

Resources