What is Invoker?
Invoker - is the universal data management tool for laravel/eloquent based applications You can see it features at https://invoker.dev/
It can work with local applications and with remote by ssh connection. But, unfortunately, it hasn't abilities for integration with apps that developed in dockers out of the box, because it distributed as executable gui application.
So we need to add an ssh service for our docker-compose.
If you use separated containers for cli and fpm, you should use cli version as a base for a new ssh container. Otherwise, use your common php container.
-
If you use prepared php image:
- create new directory, named ssh in you folder with docker config
- Inside this directory create new Dockerfile
FROM {your php image} USER root RUN apt-get update && apt-get install -y openssh-server \ && mkdir /var/run/sshd \ && echo 'root:secret' | chpasswd \ && sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \ && sed -i 's/#PasswordAuthentication/PasswordAuthentication/' /etc/ssh/sshd_config \ && sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config \ && sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ENV NOTVISIBLE "in users profile" RUN echo "export VISIBLE=now" >> /etc/profile EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
If you already use Dockerfile for php-cli service, copy it inside created ssh directory, remove CMD, ENTRYPOINT and EXPOSE instructions if it exists, and append ssh instructions above
add record in docker-compose.yml
services: sshd: build: context: your_docker_dir/ssh restart: on-failure ports: - '2266:22' links: - db # dabase service - php-cli #php service volumes: #for docker-compose < 3.x you can use volumes_from - data:/app networks: - your_network #if exists
Run docker-compose up -d
,
Open Invoker, press "Set up SSH connection", and fill
Next, you can explore your project models.
If you use docker-compose with version >= 3.4 - you can combine Dokerfile instructions like below
FROM php:7.4-cli as php_base #use preferred php image # Place here your php installation and configuration instructions FROM php_base AS php_ssh USER root RUN apt-get update && apt-get install -y openssh-server \ && mkdir /var/run/sshd \ && echo 'root:secret' | chpasswd \ && sed -i 's/PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config \ && sed -i 's/#PasswordAuthentication/PasswordAuthentication/' /etc/ssh/sshd_config \ && sed -i 's/#PermitRootLogin/PermitRootLogin/' /etc/ssh/sshd_config \ && sed 's@session\s*required\s*pam_loginuid.so@session optional pam_loginuid.so@g' -i /etc/pam.d/sshd \ && apt-get clean \ && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/* ENV NOTVISIBLE "in users profile" RUN echo "export VISIBLE=now" >> /etc/profile EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]
And use it in docker-compose like:
services: php-cli: build: context: docker/php target: php_base restart: on-failure links: - db - redis volumes: - data:/app environment: - TZ=${DB_TIMEZONE} - PHP_XDEBUG_ENABLED=1 - XDEBUG_CONFIG=remote_host=host.docker.internal - PHP_IDE_CONFIG="serverName=Docker" networks: - appnet sshd: build: context: docker/php target: php_ssh restart: on-failure ports: - '2266:22' links: - db - php-cli volumes: - data:/app networks: - appnet
Don't forget to take care about keep ssh service only for the local environment!
Top comments (2)
If you have a non-root user (e.g.
dev
) in the container and you want to log in to that user, replace this with a username. I did so to run it on mygander/dev
image.Full working example for gander/dev.
Thank you!
All worked as expected, I connected to Dockerized Laravel app :D
Great post!