Merge pull request #5114 from Dokploy/fix/issue-5108-changepassword-container-check

fix: false "container is not running" on database password change
This commit is contained in:
Mauricio Siu
2026-08-18 02:20:26 -06:00
committed by GitHub
5 changed files with 50 additions and 50 deletions
+10 -10
View File
@@ -11,7 +11,7 @@ import {
findProjectById, findProjectById,
getAccessibleServerIds, getAccessibleServerIds,
getContainerLogs, getContainerLogs,
getServiceContainerCommand, getServiceContainer,
getWebServerSettings, getWebServerSettings,
IS_CLOUD, IS_CLOUD,
rebuildDatabase, rebuildDatabase,
@@ -410,17 +410,17 @@ export const mariadbRouter = createTRPCRouter({
const maria = await findMariadbById(mariadbId); const maria = await findMariadbById(mariadbId);
const { appName, serverId, databaseUser, databaseRootPassword } = maria; const { appName, serverId, databaseUser, databaseRootPassword } = maria;
const containerCmd = getServiceContainerCommand(appName); const container = await getServiceContainer(appName, serverId);
if (!container) {
throw new TRPCError({
code: "BAD_REQUEST",
message: `No running container found for ${appName}`,
});
}
const targetUser = type === "root" ? "root" : databaseUser; const targetUser = type === "root" ? "root" : databaseUser;
const command = ` const command = `docker exec ${container.Id} mariadb -u root -p'${databaseRootPassword}' -e "ALTER USER '${targetUser}'@'%' IDENTIFIED BY '${password}'; FLUSH PRIVILEGES;"`;
CONTAINER_ID=$(${containerCmd})
if [ -z "$CONTAINER_ID" ]; then
echo "No running container found for ${appName}" >&2
exit 1
fi
docker exec "$CONTAINER_ID" mariadb -u root -p'${databaseRootPassword}' -e "ALTER USER '${targetUser}'@'%' IDENTIFIED BY '${password}'; FLUSH PRIVILEGES;"
`;
await db.transaction(async (tx) => { await db.transaction(async (tx) => {
const setData = const setData =
+10 -10
View File
@@ -11,7 +11,7 @@ import {
findProjectById, findProjectById,
getAccessibleServerIds, getAccessibleServerIds,
getContainerLogs, getContainerLogs,
getServiceContainerCommand, getServiceContainer,
getWebServerSettings, getWebServerSettings,
IS_CLOUD, IS_CLOUD,
rebuildDatabase, rebuildDatabase,
@@ -431,15 +431,15 @@ export const mongoRouter = createTRPCRouter({
const mongo = await findMongoById(mongoId); const mongo = await findMongoById(mongoId);
const { appName, serverId, databaseUser, databasePassword } = mongo; const { appName, serverId, databaseUser, databasePassword } = mongo;
const containerCmd = getServiceContainerCommand(appName); const container = await getServiceContainer(appName, serverId);
const command = ` if (!container) {
CONTAINER_ID=$(${containerCmd}) throw new TRPCError({
if [ -z "$CONTAINER_ID" ]; then code: "BAD_REQUEST",
echo "No running container found for ${appName}" >&2 message: `No running container found for ${appName}`,
exit 1 });
fi }
docker exec "$CONTAINER_ID" mongosh -u '${databaseUser}' -p '${databasePassword}' --authenticationDatabase admin --eval "db.getSiblingDB('admin').changeUserPassword('${databaseUser}', '${password}')"
`; const command = `docker exec ${container.Id} mongosh -u '${databaseUser}' -p '${databasePassword}' --authenticationDatabase admin --eval "db.getSiblingDB('admin').changeUserPassword('${databaseUser}', '${password}')"`;
await db.transaction(async (tx) => { await db.transaction(async (tx) => {
await tx await tx
+10 -10
View File
@@ -11,7 +11,7 @@ import {
findProjectById, findProjectById,
getAccessibleServerIds, getAccessibleServerIds,
getContainerLogs, getContainerLogs,
getServiceContainerCommand, getServiceContainer,
getWebServerSettings, getWebServerSettings,
IS_CLOUD, IS_CLOUD,
rebuildDatabase, rebuildDatabase,
@@ -428,17 +428,17 @@ export const mysqlRouter = createTRPCRouter({
const my = await findMySqlById(mysqlId); const my = await findMySqlById(mysqlId);
const { appName, serverId, databaseUser, databaseRootPassword } = my; const { appName, serverId, databaseUser, databaseRootPassword } = my;
const containerCmd = getServiceContainerCommand(appName); const container = await getServiceContainer(appName, serverId);
if (!container) {
throw new TRPCError({
code: "BAD_REQUEST",
message: `No running container found for ${appName}`,
});
}
const targetUser = type === "root" ? "root" : databaseUser; const targetUser = type === "root" ? "root" : databaseUser;
const command = ` const command = `docker exec ${container.Id} mysql -u root -p'${databaseRootPassword}' -e "ALTER USER '${targetUser}'@'%' IDENTIFIED BY '${password}'; FLUSH PRIVILEGES;"`;
CONTAINER_ID=$(${containerCmd})
if [ -z "$CONTAINER_ID" ]; then
echo "No running container found for ${appName}" >&2
exit 1
fi
docker exec "$CONTAINER_ID" mysql -u root -p'${databaseRootPassword}' -e "ALTER USER '${targetUser}'@'%' IDENTIFIED BY '${password}'; FLUSH PRIVILEGES;"
`;
await db.transaction(async (tx) => { await db.transaction(async (tx) => {
const setData = const setData =
+10 -10
View File
@@ -12,7 +12,7 @@ import {
getAccessibleServerIds, getAccessibleServerIds,
getContainerLogs, getContainerLogs,
getMountPath, getMountPath,
getServiceContainerCommand, getServiceContainer,
getWebServerSettings, getWebServerSettings,
IS_CLOUD, IS_CLOUD,
rebuildDatabase, rebuildDatabase,
@@ -437,15 +437,15 @@ export const postgresRouter = createTRPCRouter({
const pg = await findPostgresById(postgresId); const pg = await findPostgresById(postgresId);
const { appName, serverId, databaseUser } = pg; const { appName, serverId, databaseUser } = pg;
const containerCmd = getServiceContainerCommand(appName); const container = await getServiceContainer(appName, serverId);
const command = ` if (!container) {
CONTAINER_ID=$(${containerCmd}) throw new TRPCError({
if [ -z "$CONTAINER_ID" ]; then code: "BAD_REQUEST",
echo "No running container found for ${appName}" >&2 message: `No running container found for ${appName}`,
exit 1 });
fi }
docker exec "$CONTAINER_ID" psql -U ${databaseUser} -c "ALTER USER \\"${databaseUser}\\" WITH PASSWORD '${password}';"
`; const command = `docker exec ${container.Id} psql -U ${databaseUser} -d postgres -c "ALTER USER \\"${databaseUser}\\" WITH PASSWORD '${password}';"`;
await db.transaction(async (tx) => { await db.transaction(async (tx) => {
await tx await tx
+10 -10
View File
@@ -10,7 +10,7 @@ import {
findRedisById, findRedisById,
getAccessibleServerIds, getAccessibleServerIds,
getContainerLogs, getContainerLogs,
getServiceContainerCommand, getServiceContainer,
getWebServerSettings, getWebServerSettings,
IS_CLOUD, IS_CLOUD,
rebuildDatabase, rebuildDatabase,
@@ -418,15 +418,15 @@ export const redisRouter = createTRPCRouter({
const rd = await findRedisById(redisId); const rd = await findRedisById(redisId);
const { appName, serverId, databasePassword } = rd; const { appName, serverId, databasePassword } = rd;
const containerCmd = getServiceContainerCommand(appName); const container = await getServiceContainer(appName, serverId);
const command = ` if (!container) {
CONTAINER_ID=$(${containerCmd}) throw new TRPCError({
if [ -z "$CONTAINER_ID" ]; then code: "BAD_REQUEST",
echo "No running container found for ${appName}" >&2 message: `No running container found for ${appName}`,
exit 1 });
fi }
docker exec "$CONTAINER_ID" redis-cli -a '${databasePassword}' CONFIG SET requirepass '${password}'
`; const command = `docker exec ${container.Id} redis-cli -a '${databasePassword}' CONFIG SET requirepass '${password}'`;
await db.transaction(async (tx) => { await db.transaction(async (tx) => {
await tx await tx