bind dev Docker ports, socket REPL, and rspack dev server to loopback only (#82707)

This commit is contained in:
Aleksandr Lesnenko
2026-09-18 23:27:04 -04:00
committed by GitHub
parent 883e944cce
commit 3d924036db
22 changed files with 80 additions and 66 deletions

View File

@@ -121,6 +121,9 @@ MB_EDITION="ee"
# Frontend dev server port (for hot reload). Must match the port used by `yarn build-hot`. # Frontend dev server port (for hot reload). Must match the port used by `yarn build-hot`.
# MB_FRONTEND_DEV_PORT=8080 # MB_FRONTEND_DEV_PORT=8080
# Frontend dev server bind address. Defaults to 127.0.0.1; set 0.0.0.0 to reach it from other devices.
# MB_FRONTEND_DEV_HOST=127.0.0.1
# 3.2 E2E Local Runner Setup # 3.2 E2E Local Runner Setup
# ------------------------------------------------------------------------------ # ------------------------------------------------------------------------------

View File

@@ -27,7 +27,7 @@ services:
metabase: metabase:
image: ${METABASE_IMAGE:-metabase/metabase:latest} image: ${METABASE_IMAGE:-metabase/metabase:latest}
ports: ports:
- "${METABASE_PORT:-3000}:3000" - "127.0.0.1:${METABASE_PORT:-3000}:3000"
environment: environment:
MB_DB_TYPE: postgres MB_DB_TYPE: postgres
MB_DB_DBNAME: metabase MB_DB_DBNAME: metabase

View File

@@ -941,8 +941,10 @@
{:extra-deps {nrepl/nrepl {:mvn/version "1.5.1"}} {:extra-deps {nrepl/nrepl {:mvn/version "1.5.1"}}
:main-opts ["-m" "nrepl.cmdline" "-p" "50605"]} :main-opts ["-m" "nrepl.cmdline" "-p" "50605"]}
;; - start a Socket REPL on port 50505 that you can connect your editor to: ;; - start a Socket REPL on port 50505 that you can connect your editor to. Bound to loopback: it has no
:socket {:jvm-opts ["-Dclojure.server.repl={:address,\"0.0.0.0\",:port,50505,:accept,clojure.core.server/repl}"]} ;; authentication, so exposing it on a network interface is remote code execution. dev/docker-compose.yml
;; overrides the address for the containerized dev app, where the published port is the boundary.
:socket {:jvm-opts ["-Dclojure.server.repl={:address,\"127.0.0.1\",:port,50505,:accept,clojure.core.server/repl}"]}
;; Liquibase CLI: ;; Liquibase CLI:
;; ;;

View File

@@ -39,8 +39,8 @@ services:
image: clojure image: clojure
container_name: metabase-app container_name: metabase-app
ports: ports:
- "3001:3000" - "127.0.0.1:3001:3000"
- "50505:50505" - "127.0.0.1:50505:50505"
working_dir: /dev/metabase working_dir: /dev/metabase
volumes: volumes:
- ../:/dev/metabase - ../:/dev/metabase
@@ -58,7 +58,10 @@ services:
MB_POSTGRESQL_TEST_PASSWORD: password MB_POSTGRESQL_TEST_PASSWORD: password
MB_POSTGRESQL_TEST_PORT: 5432 MB_POSTGRESQL_TEST_PORT: 5432
MB_POSTGRESQL_TEST_USER: user MB_POSTGRESQL_TEST_USER: user
command: ["clojure", "-M:run:dev:drivers:drivers-dev:ee:ee-dev:socket"] # The :socket alias binds the REPL to loopback inside the container, which docker's port
# forwarding can't reach, so bind it to all container interfaces here instead. The host
# side stays loopback-only via the 127.0.0.1: prefix in `ports` above.
command: ["clojure", "-J-Dclojure.server.repl={:address,\"0.0.0.0\",:port,50505,:accept,clojure.core.server/repl}", "-M:run:dev:drivers:drivers-dev:ee:ee-dev"]
profiles: profiles:
- dev-app - dev-app
networks: networks:
@@ -79,10 +82,14 @@ services:
# the browser loads the bundle from the host's :8080 — it must be # the browser loads the bundle from the host's :8080 — it must be
# published, not just exposed on the docker network. # published, not just exposed on the docker network.
ports: ports:
- "8080:8080" - "127.0.0.1:8080:8080"
volumes: volumes:
- ../:/dev/metabase - ../:/dev/metabase
- ~/.bun/install/cache:/root/.bun/install/cache - ~/.bun/install/cache:/root/.bun/install/cache
environment:
# rspack binds to loopback by default; inside the container it must listen on all
# interfaces for docker's port forwarding to reach it.
MB_FRONTEND_DEV_HOST: 0.0.0.0
command: command:
- /bin/sh - /bin/sh
- -c - -c
@@ -99,7 +106,7 @@ services:
container_name: metabase-postgres-app-db container_name: metabase-postgres-app-db
restart: always restart: always
ports: ports:
- "5432:5432" - "127.0.0.1:5432:5432"
environment: environment:
POSTGRES_USER: mbuser POSTGRES_USER: mbuser
POSTGRES_PASSWORD: password POSTGRES_PASSWORD: password
@@ -116,7 +123,7 @@ services:
container_name: metabase-mysql57-app-db container_name: metabase-mysql57-app-db
restart: always restart: always
ports: ports:
- "3306:3306" - "127.0.0.1:3306:3306"
environment: environment:
MYSQL_USER: mbuser MYSQL_USER: mbuser
MYSQL_PASSWORD: password MYSQL_PASSWORD: password
@@ -138,7 +145,7 @@ services:
image: metabase/qa-databases:postgres-sample-14 image: metabase/qa-databases:postgres-sample-14
container_name: metabasedb_postgres_14_data container_name: metabasedb_postgres_14_data
ports: ports:
- "15432:5432" - "127.0.0.1:15432:5432"
restart: always restart: always
profiles: profiles:
- postgres14data - postgres14data
@@ -149,7 +156,7 @@ services:
image: metabase/qa-databases:mysql-sample-5.7 image: metabase/qa-databases:mysql-sample-5.7
container_name: metabasedb_mysql_5_7_data container_name: metabasedb_mysql_5_7_data
ports: ports:
- "23306:3306" - "127.0.0.1:23306:3306"
restart: always restart: always
profiles: profiles:
- mysql57data - mysql57data
@@ -160,7 +167,7 @@ services:
image: metabase/qa-databases:mysql-sample-8 image: metabase/qa-databases:mysql-sample-8
container_name: metabasedb_mysql_8_data container_name: metabasedb_mysql_8_data
ports: ports:
- "13306:3306" - "127.0.0.1:13306:3306"
restart: always restart: always
profiles: profiles:
- mysql8data - mysql8data
@@ -172,7 +179,7 @@ services:
container_name: metabasedb_mongo_6_data container_name: metabasedb_mongo_6_data
restart: always restart: always
ports: ports:
- "27017:27017" - "127.0.0.1:27017:27017"
profiles: profiles:
- mongodata - mongodata
networks: networks:
@@ -183,7 +190,7 @@ services:
container_name: vertica_data container_name: vertica_data
restart: always restart: always
ports: ports:
- "5433:5433" - "127.0.0.1:5433:5433"
profiles: profiles:
- verticadata - verticadata
networks: networks:
@@ -195,8 +202,8 @@ services:
image: maildev/maildev:latest image: maildev/maildev:latest
container_name: maildev container_name: maildev
ports: ports:
- "1080:1080" - "127.0.0.1:1080:1080"
- "1025:1025" - "127.0.0.1:1025:1025"
profiles: profiles:
- pulse - pulse
networks: networks:
@@ -209,7 +216,7 @@ services:
- ./idp-private-key.pem:/idp-private-key.pem - ./idp-private-key.pem:/idp-private-key.pem
- ./idp-public-cert.pem:/idp-public-cert.pem - ./idp-public-cert.pem:/idp-public-cert.pem
ports: ports:
- "7000:7000" - "127.0.0.1:7000:7000"
entrypoint: entrypoint:
- node - node
- app.js - app.js

View File

@@ -33,7 +33,7 @@ Once Docker is installed, you’re ready to go.
2. Copy and paste this command, switching out `<branch-name>` for the name of the branch you’d like to test: 2. Copy and paste this command, switching out `<branch-name>` for the name of the branch you’d like to test:
```bash ```bash
docker run --platform linux/amd64 -d -p 3000:3000 --name metabase-dev metabase/metabase-dev:<branch-name> docker run --platform linux/amd64 -d -p 127.0.0.1:3000:3000 --name metabase-dev metabase/metabase-dev:<branch-name>
``` ```
3. In your browser, navigate to `http://localhost:3000`, where you should see Metabase. It may take a minute or two to start up depending on your computer. 3. In your browser, navigate to `http://localhost:3000`, where you should see Metabase. It may take a minute or two to start up depending on your computer.
@@ -51,7 +51,7 @@ docker pull metabase/metabase-enterprise-head:latest
Then: Then:
``` ```
docker run --platform linux/amd64 -d -p 3000:3000 --name metabase metabase/metabase-enterprise-head:latest docker run --platform linux/amd64 -d -p 127.0.0.1:3000:3000 --name metabase metabase/metabase-enterprise-head:latest
``` ```
The “latest” tag is not automatically upgraded on your local machine, so the above commands ensure that you’re pulling the latest changes. The “latest” tag is not automatically upgraded on your local machine, so the above commands ensure that you’re pulling the latest changes.

View File

@@ -171,7 +171,7 @@ We have a few helpers for dealing with tests involving snowplow
Some of our tests depend on the email being set up, and require a local SMTP server. We use `maildev` Docker image for that purpose. At the time of this writing the image we use is `maildev/maildev:2.1.0`. The default cypress configuration for local development will handle this for you. If you want to set it up manually, you can use this command: Some of our tests depend on the email being set up, and require a local SMTP server. We use `maildev` Docker image for that purpose. At the time of this writing the image we use is `maildev/maildev:2.1.0`. The default cypress configuration for local development will handle this for you. If you want to set it up manually, you can use this command:
```sh ```sh
docker run -d -p 1180:1080 -p 1125:1025 maildev/maildev:2.2.1 docker run -d -p 127.0.0.1:1180:1080 -p 127.0.0.1:1125:1025 maildev/maildev:2.2.1
``` ```
The e2e maildev is published on host ports 1180 (web UI) and 1125 (SMTP) on purpose. These differ, on purpose, from the 1080/1025 used for development. The e2e maildev is published on host ports 1180 (web UI) and 1125 (SMTP) on purpose. These differ, on purpose, from the 1080/1025 used for development.

View File

@@ -13,7 +13,7 @@ const { WEB_PORT, SMTP_PORT } = WEBMAIL_CONFIG;
/** /**
* `bun run test-cypress` starts maildev for you via * `bun run test-cypress` starts maildev for you via
* e2e/test/scenarios/docker-compose.yml. To start it manually instead: * e2e/test/scenarios/docker-compose.yml. To start it manually instead:
* `docker run -d -p 1180:1080 -p 1125:1025 maildev/maildev:2.2.1` * `docker run -d -p 127.0.0.1:1180:1080 -p 127.0.0.1:1125:1025 maildev/maildev:2.2.1`
* or * or
* `npx maildev -s 1125 -w 1180` * `npx maildev -s 1125 -w 1180`
*/ */

View File

@@ -1,6 +1,6 @@
/** /**
Make sure you have the ldap test server running locally: Make sure you have the ldap test server running locally:
docker run -p 389:389 \ docker run -p 127.0.0.1:389:389 \
--env LDAP_ADMIN_PASSWORD=adminpass \ --env LDAP_ADMIN_PASSWORD=adminpass \
--env LDAP_USERS=user01@example.org,user02@example.org \ --env LDAP_USERS=user01@example.org,user02@example.org \
--env LDAP_PASSWORDS=123456,123465 \ --env LDAP_PASSWORDS=123456,123465 \

View File

@@ -883,7 +883,7 @@ describe("scenarios > admin > settings > map settings", () => {
}); });
// Ensure the webhook tester docker container is running // Ensure the webhook tester docker container is running
// docker run -p 9080:8080/tcp tarampampam/webhook-tester:1.1.0 serve --create-session 00000000-0000-0000-0000-000000000000 // docker run -p 127.0.0.1:9080:8080/tcp tarampampam/webhook-tester:1.1.0 serve --create-session 00000000-0000-0000-0000-000000000000
describe("notifications", { tags: "@external" }, () => { describe("notifications", { tags: "@external" }, () => {
beforeEach(() => { beforeEach(() => {
H.resetWebhookTester(); H.resetWebhookTester();

View File

@@ -9,32 +9,32 @@ services:
- TZ=US/Pacific - TZ=US/Pacific
image: metabase/qa-databases:postgres-sample-12 image: metabase/qa-databases:postgres-sample-12
ports: ports:
- 5404:5432 - 127.0.0.1:5404:5432
mongo-sample: mongo-sample:
image: metabase/qa-databases:mongo-sample-5 image: metabase/qa-databases:mongo-sample-5
ports: ports:
- 27004:27017 - 127.0.0.1:27004:27017
mysql-sample: mysql-sample:
environment: environment:
- TZ=US/Pacific - TZ=US/Pacific
image: metabase/qa-databases:mysql-sample-8 image: metabase/qa-databases:mysql-sample-8
ports: ports:
- 3304:3306 - 127.0.0.1:3304:3306
webhook-tester: webhook-tester:
image: tarampampam/webhook-tester:1.1.0 image: tarampampam/webhook-tester:1.1.0
ports: ports:
- 9080:8080 - 127.0.0.1:9080:8080
command: serve --create-session 00000000-0000-0000-0000-000000000000 command: serve --create-session 00000000-0000-0000-0000-000000000000
maildev: maildev:
image: maildev/maildev:2.2.1 image: maildev/maildev:2.2.1
## Host ports deliberately differ from the 1080/1025 used for development ## Host ports deliberately differ from the 1080/1025 used for development
ports: ports:
- "1180:1080" - "127.0.0.1:1180:1080"
- "1125:1025" - "127.0.0.1:1125:1025"
maildev-ssl: maildev-ssl:
## NOTE: Using this requires a root CA certificate to be added to the Java keystore. ## NOTE: Using this requires a root CA certificate to be added to the Java keystore.
@@ -43,8 +43,8 @@ services:
## breaks the SSL/SMTP setup and fails the custom SMTP e2e tests. ## breaks the SSL/SMTP setup and fails the custom SMTP e2e tests.
image: maildev/maildev:2.2.1 image: maildev/maildev:2.2.1
ports: ports:
- "1081:1081" - "127.0.0.1:1081:1081"
- "465:465" - "127.0.0.1:465:465"
environment: environment:
NODE_TLS_REJECT_UNAUTHORIZED: 0 NODE_TLS_REJECT_UNAUTHORIZED: 0
MAILDEV_WEB_PORT: 1081 MAILDEV_WEB_PORT: 1081
@@ -58,7 +58,7 @@ services:
saml-idp: saml-idp:
image: boxyhq/mock-saml:1.4.2 image: boxyhq/mock-saml:1.4.2
ports: ports:
- "8090:4000" - "127.0.0.1:8090:4000"
environment: environment:
APP_URL: http://localhost:8090 APP_URL: http://localhost:8090
ENTITY_ID: https://saml.example.com/entityid ENTITY_ID: https://saml.example.com/entityid
@@ -68,7 +68,7 @@ services:
ldap: ldap:
image: bitnamilegacy/openldap:2.6.4 image: bitnamilegacy/openldap:2.6.4
ports: ports:
- "389:389" - "127.0.0.1:389:389"
environment: environment:
LDAP_ADMIN_PASSWORD: adminpass LDAP_ADMIN_PASSWORD: adminpass
LDAP_USERS: user01@example.org,user02@example.org LDAP_USERS: user01@example.org,user02@example.org

View File

@@ -592,7 +592,7 @@ describe("scenarios > question > saved", () => {
//http://127.0.0.1:9080/api/session/00000000-0000-0000-0000-000000000000/requests //http://127.0.0.1:9080/api/session/00000000-0000-0000-0000-000000000000/requests
// Ensure the webhook tester docker container is running // Ensure the webhook tester docker container is running
// docker run -p 9080:8080/tcp tarampampam/webhook-tester:1.1.0 serve --create-session 00000000-0000-0000-0000-000000000000 // docker run -p 127.0.0.1:9080:8080/tcp tarampampam/webhook-tester:1.1.0 serve --create-session 00000000-0000-0000-0000-000000000000
describe( describe(
"scenarios > question > saved > alerts", "scenarios > question > saved > alerts",
{ tags: ["@external"] }, { tags: ["@external"] },

View File

@@ -13,7 +13,7 @@ services:
POSTGRES_USER: postgres POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres POSTGRES_PASSWORD: postgres
ports: ports:
- "55432:5432" - "127.0.0.1:55432:5432"
volumes: volumes:
- pgvector17_data:/var/lib/postgresql/data - pgvector17_data:/var/lib/postgresql/data
healthcheck: healthcheck:
@@ -25,7 +25,7 @@ services:
ollama: ollama:
image: ollama/ollama:latest image: ollama/ollama:latest
ports: ports:
- "11434:11434" - "127.0.0.1:11434:11434"
volumes: volumes:
- ollama_data:/root/.ollama - ollama_data:/root/.ollama
healthcheck: healthcheck:

View File

@@ -104,7 +104,7 @@ export const startLocalMetabaseContainer: CliStepMethod = async (state) => {
.join(" "); .join(" ");
const { stderr, stdout } = await exec( const { stderr, stdout } = await exec(
`docker run --pull always --detach -p ${port}:3000 ${envFlags} --name ${CONTAINER_NAME} ${IMAGE_NAME}`, `docker run --pull always --detach -p 127.0.0.1:${port}:3000 ${envFlags} --name ${CONTAINER_NAME} ${IMAGE_NAME}`,
); );
if (stdout) { if (stdout) {

View File

@@ -227,7 +227,7 @@
container-name (str container-prefix "-" suffix) container-name (str container-prefix "-" suffix)
host-port (host-port-for-image image ci-port-mapping) host-port (host-port-for-image image ci-port-mapping)
container-port (second (str/split ci-port-mapping #":")) container-port (second (str/split ci-port-mapping #":"))
port-mapping (str host-port ":" container-port) port-mapping (str "127.0.0.1:" host-port ":" container-port)
current-image (running-container-image container-name)] current-image (running-container-image container-name)]
(if (= current-image image) (if (= current-image image)
(do (println (c/green "Reusing existing") container-name (str "(" image ")")) (do (println (c/green "Reusing existing") container-name (str "(" image ")"))
@@ -378,7 +378,7 @@
container-name (str container-prefix "-" suffix) container-name (str container-prefix "-" suffix)
host-port (host-port-for-image image ci-ports) host-port (host-port-for-image image ci-ports)
container-port (second (str/split ci-ports #":")) container-port (second (str/split ci-ports #":"))
port-mapping (str host-port ":" container-port) port-mapping (str "127.0.0.1:" host-port ":" container-port)
env-args (mapcat (fn [[k v]] ["-e" (str (name k) "=" v)]) (or svc-env {}))]] env-args (mapcat (fn [[k v]] ["-e" (str (name k) "=" v)]) (or svc-env {}))]]
(vec (concat ["docker" "run" "-d" (vec (concat ["docker" "run" "-d"
"--name" container-name "--name" container-name
@@ -441,7 +441,6 @@
(println) (println)
(println (c/bold (str "=== CI Test REPL: " (display-name test-job) " ==="))) (println (c/bold (str "=== CI Test REPL: " (display-name test-job) " ===")))
(println) (println)
;; Start Docker services and collect port remappings ;; Start Docker services and collect port remappings
(let [port-remaps (if (has-services? test-job) (let [port-remaps (if (has-services? test-job)
(start-services! test-job) (start-services! test-job)
@@ -451,7 +450,6 @@
(println (c/bold "Starting nREPL") "(aliases: :dev:ee:ee-dev:drivers:drivers-dev)...") (println (c/bold "Starting nREPL") "(aliases: :dev:ee:ee-dev:drivers:drivers-dev)...")
(println "To stop containers:" (c/green (str "docker rm -f $(docker ps -q --filter name=" container-prefix ")"))) (println "To stop containers:" (c/green (str "docker rm -f $(docker ps -q --filter name=" container-prefix ")")))
(println) (println)
;; Replace this process with the nREPL (like shell `exec`) ;; Replace this process with the nREPL (like shell `exec`)
(let [extra-env (into {} (map (fn [[k v]] [(name k) (str v)]) ci-env))] (let [extra-env (into {} (map (fn [[k v]] [(name k) (str v)]) ci-env))]
(process/exec {:extra-env extra-env} (process/exec {:extra-env extra-env}

View File

@@ -135,7 +135,7 @@
(into ["docker" "run" "-d"] (into ["docker" "run" "-d"]
(concat (concat
(mapcat (fn [[host-port internal-port]] (mapcat (fn [[host-port internal-port]]
["-p" (str host-port ":" internal-port)]) ["-p" (str "127.0.0.1:" host-port ":" internal-port)])
port-mappings) port-mappings)
(mapcat (fn [[k v]] (mapcat (fn [[k v]]
["-e" (str k "=" v)]) ["-e" (str k "=" v)])

View File

@@ -115,7 +115,7 @@
(into ["docker" "run" "-d"] (into ["docker" "run" "-d"]
(concat (concat
(mapcat (fn [[host-port internal-port]] (mapcat (fn [[host-port internal-port]]
["-p" (str host-port ":" internal-port)]) ["-p" (str "127.0.0.1:" host-port ":" internal-port)])
port-mappings) port-mappings)
(mapcat (fn [[k v]] (mapcat (fn [[k v]]
["-e" (str k "=" v)]) ["-e" (str k "=" v)])

View File

@@ -126,7 +126,7 @@
(into ["docker" "run" "-d"] (into ["docker" "run" "-d"]
(concat (concat
(mapcat (fn [[host-port internal-port]] (mapcat (fn [[host-port internal-port]]
["-p" (str host-port ":" internal-port)]) ["-p" (str "127.0.0.1:" host-port ":" internal-port)])
port-mappings) port-mappings)
(mapcat (fn [[k v]] (mapcat (fn [[k v]]
["-e" (str k "=" v)]) ["-e" (str k "=" v)])

View File

@@ -92,7 +92,7 @@
(defmethod docker-cmd :postgres (defmethod docker-cmd :postgres
[_db container-name resolved-version port] [_db container-name resolved-version port]
["docker" "run" "-d" ["docker" "run" "-d"
"-p" (str port ":5432") "-p" (str "127.0.0.1:" port ":5432")
;; "--network" "psql-metabase-network" ;; "--network" "psql-metabase-network"
"-e" "POSTGRES_USER=metabase" "-e" "POSTGRES_USER=metabase"
"-e" "POSTGRES_DB=metabase" "-e" "POSTGRES_DB=metabase"
@@ -105,7 +105,7 @@
(defmethod docker-cmd :mysql (defmethod docker-cmd :mysql
[_db container-name resolved-version port] [_db container-name resolved-version port]
["docker" "run" "-d" ["docker" "run" "-d"
"-p" (str port ":3306") "-p" (str "127.0.0.1:" port ":3306")
"-e" "MYSQL_DATABASE=metabase_test" "-e" "MYSQL_DATABASE=metabase_test"
"-e" "MYSQL_ALLOW_EMPTY_PASSWORD=yes" "-e" "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
"--name" container-name "--name" container-name
@@ -114,7 +114,7 @@
(defmethod docker-cmd :mariadb (defmethod docker-cmd :mariadb
[_db container-name resolved-version port] [_db container-name resolved-version port]
["docker" "run" "-d" ["docker" "run" "-d"
"-p" (str port ":3306") "-p" (str "127.0.0.1:" port ":3306")
"-e" "MYSQL_DATABASE=metabase_test" "-e" "MYSQL_DATABASE=metabase_test"
"-e" "MYSQL_ALLOW_EMPTY_PASSWORD=yes" "-e" "MYSQL_ALLOW_EMPTY_PASSWORD=yes"
"--name" container-name "--name" container-name
@@ -125,7 +125,7 @@
["docker" "run" "-d" ["docker" "run" "-d"
"-e" "MONGO_INITDB_ROOT_USERNAME=metabase" "-e" "MONGO_INITDB_ROOT_USERNAME=metabase"
"-e" "MONGO_INITDB_ROOT_PASSWORD=metasample123" "-e" "MONGO_INITDB_ROOT_PASSWORD=metasample123"
"-p" (str port ":27017") "-p" (str "127.0.0.1:" port ":27017")
"--name" container-name "--name" container-name
(str "mongo:" resolved-version)]) (str "mongo:" resolved-version)])
@@ -141,7 +141,7 @@
(defmethod docker-cmd :sqlserver (defmethod docker-cmd :sqlserver
[_db container-name resolved-version port] [_db container-name resolved-version port]
["docker" "run" "-d" ["docker" "run" "-d"
"-p" (str port ":1433") "-p" (str "127.0.0.1:" port ":1433")
"-e" "ACCEPT_EULA=Y" "-e" "ACCEPT_EULA=Y"
"-e" "SA_PASSWORD=P@ssw0rd" "-e" "SA_PASSWORD=P@ssw0rd"
"--name" container-name "--name" container-name
@@ -150,7 +150,7 @@
(defmethod docker-cmd :oracle (defmethod docker-cmd :oracle
[_db container-name resolved-version port] [_db container-name resolved-version port]
["docker" "run" "-d" ["docker" "run" "-d"
"-p" (str port ":1521") "-p" (str "127.0.0.1:" port ":1521")
"-e" "ORACLE_PASSWORD=password" "-e" "ORACLE_PASSWORD=password"
"--name" container-name "--name" container-name
(if (= resolved-version "latest") (if (= resolved-version "latest")

View File

@@ -9,8 +9,8 @@ services:
container_name: 'mb-clickhouse-latest' container_name: 'mb-clickhouse-latest'
hostname: clickhouse hostname: clickhouse
ports: ports:
- '8123:8123' - '127.0.0.1:8123:8123'
- '9000:9000' - '127.0.0.1:9000:9000'
environment: environment:
CLICKHOUSE_SKIP_USER_SETUP: 1 CLICKHOUSE_SKIP_USER_SETUP: 1
ulimits: ulimits:
@@ -32,8 +32,8 @@ services:
dockerfile: .docker/clickhouse/single_node_tls/Dockerfile dockerfile: .docker/clickhouse/single_node_tls/Dockerfile
container_name: 'metabase-driver-clickhouse-server-tls' container_name: 'metabase-driver-clickhouse-server-tls'
ports: ports:
- '8443:8443' - '127.0.0.1:8443:8443'
- '9440:9440' - '127.0.0.1:9440:9440'
environment: environment:
CLICKHOUSE_SKIP_USER_SETUP: 1 CLICKHOUSE_SKIP_USER_SETUP: 1
ulimits: ulimits:
@@ -56,8 +56,8 @@ services:
container_name: 'mb-clickhouse-oldest' container_name: 'mb-clickhouse-oldest'
hostname: clickhouse.older hostname: clickhouse.older
ports: ports:
- '8124:8123' - '127.0.0.1:8124:8123'
- '9001:9000' - '127.0.0.1:9001:9000'
environment: environment:
CLICKHOUSE_SKIP_USER_SETUP: 1 CLICKHOUSE_SKIP_USER_SETUP: 1
ulimits: ulimits:
@@ -82,9 +82,9 @@ services:
hostname: clickhouse1 hostname: clickhouse1
container_name: metabase-driver-clickhouse-cluster-node-1 container_name: metabase-driver-clickhouse-cluster-node-1
ports: ports:
- '8125:8123' - '127.0.0.1:8125:8123'
- '9002:9000' - '127.0.0.1:9002:9000'
- '9181:9181' - '127.0.0.1:9181:9181'
environment: environment:
CLICKHOUSE_SKIP_USER_SETUP: 1 CLICKHOUSE_SKIP_USER_SETUP: 1
volumes: volumes:
@@ -101,9 +101,9 @@ services:
hostname: clickhouse2 hostname: clickhouse2
container_name: metabase-driver-clickhouse-cluster-node-2 container_name: metabase-driver-clickhouse-cluster-node-2
ports: ports:
- '8126:8123' - '127.0.0.1:8126:8123'
- '9003:9000' - '127.0.0.1:9003:9000'
- '9182:9181' - '127.0.0.1:9182:9181'
environment: environment:
CLICKHOUSE_SKIP_USER_SETUP: 1 CLICKHOUSE_SKIP_USER_SETUP: 1
volumes: volumes:
@@ -117,7 +117,7 @@ services:
image: 'nginx:1.23.1-alpine' image: 'nginx:1.23.1-alpine'
hostname: nginx hostname: nginx
ports: ports:
- '8127:8123' - '127.0.0.1:8127:8123'
volumes: volumes:
- './.docker/nginx/local.conf:/etc/nginx/conf.d/local.conf' - './.docker/nginx/local.conf:/etc/nginx/conf.d/local.conf'
container_name: metabase-nginx container_name: metabase-nginx

View File

@@ -49,6 +49,10 @@ const isEEBuild = process.env.MB_EDITION === "ee";
const SDK_DOCS_SNIPPETS_PATH = __dirname + "/docs/embedding/sdk/snippets"; const SDK_DOCS_SNIPPETS_PATH = __dirname + "/docs/embedding/sdk/snippets";
const PORT = process.env.MB_FRONTEND_DEV_PORT || 8080; const PORT = process.env.MB_FRONTEND_DEV_PORT || 8080;
// Bind to loopback by default so the hot-reload server is not reachable from the
// local network. Set MB_FRONTEND_DEV_HOST=0.0.0.0 to serve it to other devices
// (or from inside a container, where the published port is the boundary).
const HOST = process.env.MB_FRONTEND_DEV_HOST || "127.0.0.1";
const isDevMode = IS_DEV_MODE; const isDevMode = IS_DEV_MODE;
const shouldEnableHotRefresh = WEBPACK_BUNDLE === "hot"; const shouldEnableHotRefresh = WEBPACK_BUNDLE === "hot";
@@ -465,7 +469,7 @@ if (shouldEnableHotRefresh) {
// if you want to reduce stats noise // if you want to reduce stats noise
// stats: 'minimal' // values: none, errors-only, minimal, normal, verbose // stats: 'minimal' // values: none, errors-only, minimal, normal, verbose
}, },
host: "0.0.0.0", host: HOST,
}; };
config.watchOptions = { config.watchOptions = {

View File

@@ -2,7 +2,7 @@ services:
snowplow-micro: snowplow-micro:
image: snowplow/snowplow-micro:2.3.0 image: snowplow/snowplow-micro:2.3.0
ports: ports:
- "9090:9090" - "127.0.0.1:9090:9090"
volumes: volumes:
- .:/config - .:/config
command: "--collector-config /config/micro.conf --iglu /config/iglu.json" command: "--collector-config /config/micro.conf --iglu /config/iglu.json"

View File

@@ -33,7 +33,7 @@ fi
echo "Running mongod version ${version} in SSL mode ${ssl}" echo "Running mongod version ${version} in SSL mode ${ssl}"
docker run -d -it --rm -p 27017:27017 --name metamongo \ docker run -d -it --rm -p 127.0.0.1:27017:27017 --name metamongo \
-e MONGO_INITDB_ROOT_USERNAME=metabase \ -e MONGO_INITDB_ROOT_USERNAME=metabase \
-e MONGO_INITDB_ROOT_PASSWORD=metasample123 \ -e MONGO_INITDB_ROOT_PASSWORD=metasample123 \
metabase/qa-databases:mongo-sample-${version} \ metabase/qa-databases:mongo-sample-${version} \