Моя новая обязанность - портировать наш проект в докеры. Это означает локальный код на каждом компьютере разработчика с тестовыми данными на промежуточном сервере. На данный момент код находится на том же сервере и, таким образом, использует локальный хост (127.0.0.1) для подключения к базе данных. Докер в настоящее время развертывает и может запускать модульные тесты, которые успешно выполняются в тех случаях, когда БД не требуется.
Я пытался использовать ответы, приведенные здесь: https://github.com/phpmyadmin/docker/issues/99, который не удался в то время имножество разных попыток в конечном итоге привели к попытке создания SSH-туннелей изнутри контейнера ( Как мне пройти этот SSH-туннель от локального докера разработки до промежуточной базы данных ). Я вернулся к попытке использовать сервис, так как другие опции кажутся еще более сложными или ненадежными.
Я вернулся к использованию изображения kingsquare, которое позволяет туннелировать, но я не знаю, что ${SSH_AUTH_SOCK} есть или как его использовать. Я пытался указать его на ключе SSH, но это (вероятно, очевидно) не сработало.
Я включил весь docker-compose.yml, поскольку более ранняя ошибка, которую я не заметил, не включает ссылку на сетьв моем существующем докере (app).
version: '3'
services:
tunnels:
image: kingsquare/tunnel
volumes:
- '${SSH_AUTH_SOCK}:/ssh-agent'
command: '*:3306:localhost:3306 -vvv user@[myserver->the IP of the machine hosting the DB?] -i /.ssh/openssh_ironman_justin -p 2302'
networks:
mynetwork:
aliases:
- remoteserver
app:
build:
context: .
dockerfile: .docker/Dockerfile
args:
APP_PATH: ${APP_PATH}
image: laravel-docker
env_file: .env
ports:
- 8080:80
# We need to expose 443 port for SSL certification.
- "443:443"
volumes:
- .:/var/www/jumbledown
networks:
- mynetwork
networks:
mynetwork:
driver: bridge
В файле .env у каждого разработчика есть следующее, что мне нужно изменить после завершения туннеля SSH, чтобы он использовал комбинацию туннель-DB:
DB_HOST=127.0.0.1 # As per answer, this will change to the IP address of the server containing the database. I'll leave the current localhost reference rather than displaying the IP address of the machine.
DB_PORT=3306
DB_DATABASE=[central database or sharded version for testing data changes]
DB_USERNAME=[username]
DB_PASSWORD=[password]
Я бы хотел иметь возможность получить код в контейнере приложения, способный использовать базу данных на удаленном сервере, с минимальными сложностями после развертывания.
Обновление Я решил проблему с портом.
Обновление 2.5 Если я использую command: '*:3306:localhost:3306 -vvv [username]@[IP of DB host] -i [location on my PC of key file]/openssh_dev -p 2302'
, тогда он устанавливает соединение, но ему отказывают с помощью:
tunnels_1 | debug1: Trying private key: /.ssh/openssh_ironman_justin
tunnels_1 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
tunnels_1 | @ WARNING: UNPROTECTED PRIVATE KEY FILE! @
tunnels_1 | @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
tunnels_1 | Permissions 0755 for '/.ssh/openssh_dev ' are too open.
tunnels_1 | It is required that your private key files are NOT accessible by others.
tunnels_1 | This private key will be ignored.
Но как мне изменить права доступа для смонтированного файла? Это можно сделать через Dockerfile, или оно должно уже присутствовать до того, как оно начнется?