We are currently solving the following issue within our repository. Here is the issue text:
--- BEGIN ISSUE ---
"Maximum batch size" and "Maximum batch time" are not overwritten through env variables
if the two variable `max_batch_time` and `max_batch_size` are defined in the `model-settings.json`:
```json
{
    "name": "node-1",
    "implementation": "models.NodeOne",
    "max_batch_size": 5,
    "max_batch_time": 1,
    "parameters": {
        "uri": "./fakeuri"
    }
}
```
Then they couldn't be overwritten by environment variables `MLSERVER_MODEL_MAX_BATCH_SIZE` and `MLSERVER_MODEL_MAX_BATCH_TIME` and mlserver will always revert back to the values set in the `model-settings.json`. However, it is expected to use the values in the json as defaults and env variable as user arguments for overwriting them.


--- END ISSUE ---

Below are some code segments, each from a relevant file. One or more of these files may contain bugs.
--- BEGIN FILES ---
Path: `hack/generate_dotenv.py`
Content:
```
1 #!/usr/bin/env python
2 """
3 This script will read the `settings.json` and `model-settings.json` on a given
4 folder and will export them as environment variables.
5 
6 This is used when building custom Docker images, which may have a default set
7 of settings that we want to source always (e.g. the default runtime to use).
8 """
9 
10 import click
11 import json
12 from json import JSONDecodeError
13 import os
14 
15 from typing import List, Tuple, Type
16 from pydantic import BaseSettings
17 
18 from mlserver.settings import Settings, ModelSettings, ModelParameters
19 from mlserver.cli.serve import DEFAULT_SETTINGS_FILENAME
20 from mlserver.repository import DEFAULT_MODEL_SETTINGS_FILENAME
21 
22 
23 def load_default_settings(folder: str) -> List[Tuple[Type[BaseSettings], dict]]:
24     default_settings = []
25 
26     settings_path = os.path.join(folder, DEFAULT_SETTINGS_FILENAME)
27     if os.path.isfile(settings_path):
28         default_settings.append((Settings, _read_json_file(settings_path)))
29 
30     model_parameters = None
31     model_settings_path = os.path.join(folder, DEFAULT_MODEL_SETTINGS_FILENAME)
32     if os.path.isfile(model_settings_path):
33         raw_defaults = _read_json_file(model_settings_path)
34         model_parameters = raw_defaults.pop("parameters", None)
35         default_settings.append((ModelSettings, raw_defaults))
36 
37     if model_parameters:
38         default_settings.append((ModelParameters, model_parameters))
39 
40     return default_settings
41 
42 
43 def _read_json_file(file_path: str) -> dict:
44     with open(file_path, "r") as file:
45         return json.load(file)
46 
47 
48 def get_default_env(default_settings: List[Tuple[Type[BaseSettings], dict]]) -> dict:
49     env = {}
50     for settings_class, raw_defaults in default_settings:
51         env.update(_convert_to_env(settings_class, raw_defaults))
52 
53     return env
54 
55 
56 def _convert_to_env(settings_class: Type[BaseSettings], raw_defaults: dict) -> dict:
57     env = {}
58 
59     env_prefix = _get_env_prefix(settings_class)
60     for field_name, field_value in raw_defaults.items():
61         env_var_name = env_prefix + field_name.upper()
62         env[env_var_name] = str(field_value)
63 
64     return env
65 
66 
67 def _get_env_prefix(settings_class: Type[BaseSettings]) -> str:
68     if not hasattr(settings_class, "Config"):
69         return ""
70 
71     config = settings_class.Config
72     return getattr(config, "env_prefix", "")
73 
74 
75 def save_default_env(env: dict, output: str):
76     with open(output, "w") as file:
77         for name, value in env.items():
78             file.write(_parse_dict_values(name, value))
79 
80 
81 def _parse_dict_values(name: str, value: str) -> str:
82     try:
83         value = value.replace("'", '"')
84         json.loads(value)
85         return f"export {name}='{value}'\n"
86     except JSONDecodeError:
87         return f'export {name}="{value}"\n'
88 
89 
90 @click.command()
91 @click.argument("folder", nargs=1)
92 @click.argument("output", nargs=1)
93 def main(folder: str, output: str):
94     default_settings = load_default_settings(folder)
95     default_env = get_default_env(default_settings)
96     save_default_env(default_env, output)
97 
98 
99 if __name__ == "__main__":
100     main()
101
```

Path: `mlserver/cli/constants.py`
Content:
```
1 DockerfileName = "Dockerfile"
2 DockerfileTemplate = """
3 FROM continuumio/miniconda3:4.12.0 AS env-builder
4 SHELL ["/bin/bash", "-c"]
5 
6 ARG MLSERVER_ENV_NAME="mlserver-custom-env" \\
7     MLSERVER_ENV_TARBALL="./envs/base.tar.gz"
8 
9 RUN conda config --add channels conda-forge && \\
10     conda install conda-pack
11 
12 # The `[]` character range will ensure that Docker doesn't complain if the
13 # files don't exist:
14 # https://stackoverflow.com/a/65138098/5015573
15 COPY \\
16     ./environment.ym[l] \\
17     ./environment.yam[l] \\
18     ./conda.ym[l] \\
19     ./conda.yam[l] \\
20     .
21 RUN mkdir $(dirname $MLSERVER_ENV_TARBALL); \\
22     for envFile in environment.yml environment.yaml conda.yml conda.yaml; do \\
23         if [[ -f $envFile ]]; then \\
24             conda env create \
25                 --name $MLSERVER_ENV_NAME \\
26                 --file $envFile; \\
27             conda-pack --ignore-missing-files \
28                 -n $MLSERVER_ENV_NAME \\
29                 -o $MLSERVER_ENV_TARBALL; \\
30         fi \\
31     done; \\
32     chmod -R 776 $(dirname $MLSERVER_ENV_TARBALL)
33 
34 FROM seldonio/mlserver:{version}-slim
35 SHELL ["/bin/bash", "-c"]
36 
37 # Copy all potential sources for custom environments
38 COPY \\
39     --chown=1000 \\
40     --from=env-builder \\
41     /envs/base.tar.g[z] \\
42     ./envs/base.tar.gz
43 COPY \\
44     ./settings.jso[n] \\
45     ./model-settings.jso[n] \\
46     ./requirements.tx[t] \\
47     .
48 
49 USER root
50 # Install dependencies system-wide, to ensure that they are available for every
51 # user
52 RUN ./hack/build-env.sh . ./envs/base && \
53     chown -R 1000:0 ./envs/base && \\
54     chmod -R 776 ./envs/base
55 USER 1000
56 
57 # Copy everything else
58 COPY . .
59 
60 # Override MLServer's own `CMD` to activate the embedded environment
61 # (optionally activating the hot-loaded one as well).
62 CMD source ./hack/activate-env.sh ./envs/base.tar.gz ./envs/base && \\
63     mlserver start $MLSERVER_MODELS_DIR
64 """
65 
66 DockerignoreName = ".dockerignore"
67 Dockerignore = """
68 # Binaries for programs and plugins
69 *.exe
70 *.exe~
71 *.dll
72 *.so
73 *.dylib
74 *.pyc
75 *.pyo
76 *.pyd
77 bin
78 
79 # Mac file system
80 **/.DS_Store
81 
82 # Python dev
83 __pycache__
84 .Python
85 env
86 pip-log.txt
87 pip-delete-this-directory.txt
88 .mypy_cache
89 eggs/
90 .eggs/
91 *.egg-info/
92 ./pytest_cache
93 .tox
94 build/
95 dist/
96 
97 # Notebook Checkpoints
98 .ipynb_checkpoints
99 
100 .coverage
101 .coverage.*
102 .cache
103 nosetests.xml
104 coverage.xml
105 *,cover
106 *.log
107 .git
108 """
109
```
--- END FILES ---

Please first localize the bug based on the issue statement, and then generate a patch according to the `git diff` format fenced by three backticks.

Here is an example:

```diff
diff --git a/examples/server_async.py b/examples/server_async.py
--- a/examples/server_async.py
+++ b/examples/server_async.py
@@ -313,4 +313,4 @@
 
 
 if __name__ == "__main__":
-    asyncio.run(run_async_server("."), debug=True)
+    asyncio.run(run_async_server(), debug=True)
diff --git a/examples/server_sync.py b/examples/server_sync.py
--- a/examples/server_sync.py
+++ b/examples/server_sync.py
@@ -313,5 +313,5 @@
 
 
 if __name__ == "__main__":
-    server = run_sync_server(".")
+    server = run_sync_server()
     server.shutdown()

```

diff --git a/hack/generate_dotenv.py b/hack/generate_dotenv.py
--- a/hack/generate_dotenv.py
+++ b/hack/generate_dotenv.py
@@ -82,9 +82,10 @@
     try:
         value = value.replace("'", '"')
         json.loads(value)
-        return f"export {name}='{value}'\n"
+        return f"{name}='{value}'\n"
     except JSONDecodeError:
-        return f'export {name}="{value}"\n'
+        # If not JSON, then assume it's a plain string
+        return f'{name}="{value}"\n'
 
 
 @click.command()
diff --git a/mlserver/cli/constants.py b/mlserver/cli/constants.py
--- a/mlserver/cli/constants.py
+++ b/mlserver/cli/constants.py
@@ -48,8 +48,9 @@
 
 USER root
 # Install dependencies system-wide, to ensure that they are available for every
-# user
-RUN ./hack/build-env.sh . ./envs/base && \
+# user and give permissions to (future) environment folder.
+RUN ./hack/build-env.sh . && \\
+    mkdir -p ./envs/base && \\
     chown -R 1000:0 ./envs/base && \\
     chmod -R 776 ./envs/base
 USER 1000
@@ -59,7 +60,7 @@
 
 # Override MLServer's own `CMD` to activate the embedded environment
 # (optionally activating the hot-loaded one as well).
-CMD source ./hack/activate-env.sh ./envs/base.tar.gz ./envs/base && \\
+CMD source ./hack/activate-env.sh ./envs/base.tar.gz && \\
     mlserver start $MLSERVER_MODELS_DIR
 """

{"golden_diff": "diff --git a/hack/generate_dotenv.py b/hack/generate_dotenv.py\n--- a/hack/generate_dotenv.py\n+++ b/hack/generate_dotenv.py\n@@ -82,9 +82,10 @@\n     try:\n         value = value.replace(\"'\", '\"')\n         json.loads(value)\n-        return f\"export {name}='{value}'\\n\"\n+        return f\"{name}='{value}'\\n\"\n     except JSONDecodeError:\n-        return f'export {name}=\"{value}\"\\n'\n+        # If not JSON, then assume it's a plain string\n+        return f'{name}=\"{value}\"\\n'\n \n \n @click.command()\ndiff --git a/mlserver/cli/constants.py b/mlserver/cli/constants.py\n--- a/mlserver/cli/constants.py\n+++ b/mlserver/cli/constants.py\n@@ -48,8 +48,9 @@\n \n USER root\n # Install dependencies system-wide, to ensure that they are available for every\n-# user\n-RUN ./hack/build-env.sh . ./envs/base && \\\n+# user and give permissions to (future) environment folder.\n+RUN ./hack/build-env.sh . && \\\\\n+    mkdir -p ./envs/base && \\\\\n     chown -R 1000:0 ./envs/base && \\\\\n     chmod -R 776 ./envs/base\n USER 1000\n@@ -59,7 +60,7 @@\n \n # Override MLServer's own `CMD` to activate the embedded environment\n # (optionally activating the hot-loaded one as well).\n-CMD source ./hack/activate-env.sh ./envs/base.tar.gz ./envs/base && \\\\\n+CMD source ./hack/activate-env.sh ./envs/base.tar.gz && \\\\\n     mlserver start $MLSERVER_MODELS_DIR\n \"\"\"\n", "issue": "\"Maximum batch size\" and \"Maximum batch time\" are not overwritten through env variables\nif the two variable `max_batch_time` and `max_batch_size` are defined in the `model-settings.json`:\r\n```json\r\n{\r\n    \"name\": \"node-1\",\r\n    \"implementation\": \"models.NodeOne\",\r\n    \"max_batch_size\": 5,\r\n    \"max_batch_time\": 1,\r\n    \"parameters\": {\r\n        \"uri\": \"./fakeuri\"\r\n    }\r\n}\r\n```\r\nThen they couldn't be overwritten by environment variables `MLSERVER_MODEL_MAX_BATCH_SIZE` and `MLSERVER_MODEL_MAX_BATCH_TIME` and mlserver will always revert back to the values set in the `model-settings.json`. However, it is expected to use the values in the json as defaults and env variable as user arguments for overwriting them.\r\n\n", "before_files": [{"content": "#!/usr/bin/env python\n\"\"\"\nThis script will read the `settings.json` and `model-settings.json` on a given\nfolder and will export them as environment variables.\n\nThis is used when building custom Docker images, which may have a default set\nof settings that we want to source always (e.g. the default runtime to use).\n\"\"\"\n\nimport click\nimport json\nfrom json import JSONDecodeError\nimport os\n\nfrom typing import List, Tuple, Type\nfrom pydantic import BaseSettings\n\nfrom mlserver.settings import Settings, ModelSettings, ModelParameters\nfrom mlserver.cli.serve import DEFAULT_SETTINGS_FILENAME\nfrom mlserver.repository import DEFAULT_MODEL_SETTINGS_FILENAME\n\n\ndef load_default_settings(folder: str) -> List[Tuple[Type[BaseSettings], dict]]:\n    default_settings = []\n\n    settings_path = os.path.join(folder, DEFAULT_SETTINGS_FILENAME)\n    if os.path.isfile(settings_path):\n        default_settings.append((Settings, _read_json_file(settings_path)))\n\n    model_parameters = None\n    model_settings_path = os.path.join(folder, DEFAULT_MODEL_SETTINGS_FILENAME)\n    if os.path.isfile(model_settings_path):\n        raw_defaults = _read_json_file(model_settings_path)\n        model_parameters = raw_defaults.pop(\"parameters\", None)\n        default_settings.append((ModelSettings, raw_defaults))\n\n    if model_parameters:\n        default_settings.append((ModelParameters, model_parameters))\n\n    return default_settings\n\n\ndef _read_json_file(file_path: str) -> dict:\n    with open(file_path, \"r\") as file:\n        return json.load(file)\n\n\ndef get_default_env(default_settings: List[Tuple[Type[BaseSettings], dict]]) -> dict:\n    env = {}\n    for settings_class, raw_defaults in default_settings:\n        env.update(_convert_to_env(settings_class, raw_defaults))\n\n    return env\n\n\ndef _convert_to_env(settings_class: Type[BaseSettings], raw_defaults: dict) -> dict:\n    env = {}\n\n    env_prefix = _get_env_prefix(settings_class)\n    for field_name, field_value in raw_defaults.items():\n        env_var_name = env_prefix + field_name.upper()\n        env[env_var_name] = str(field_value)\n\n    return env\n\n\ndef _get_env_prefix(settings_class: Type[BaseSettings]) -> str:\n    if not hasattr(settings_class, \"Config\"):\n        return \"\"\n\n    config = settings_class.Config\n    return getattr(config, \"env_prefix\", \"\")\n\n\ndef save_default_env(env: dict, output: str):\n    with open(output, \"w\") as file:\n        for name, value in env.items():\n            file.write(_parse_dict_values(name, value))\n\n\ndef _parse_dict_values(name: str, value: str) -> str:\n    try:\n        value = value.replace(\"'\", '\"')\n        json.loads(value)\n        return f\"export {name}='{value}'\\n\"\n    except JSONDecodeError:\n        return f'export {name}=\"{value}\"\\n'\n\n\n@click.command()\n@click.argument(\"folder\", nargs=1)\n@click.argument(\"output\", nargs=1)\ndef main(folder: str, output: str):\n    default_settings = load_default_settings(folder)\n    default_env = get_default_env(default_settings)\n    save_default_env(default_env, output)\n\n\nif __name__ == \"__main__\":\n    main()\n", "path": "hack/generate_dotenv.py"}, {"content": "DockerfileName = \"Dockerfile\"\nDockerfileTemplate = \"\"\"\nFROM continuumio/miniconda3:4.12.0 AS env-builder\nSHELL [\"/bin/bash\", \"-c\"]\n\nARG MLSERVER_ENV_NAME=\"mlserver-custom-env\" \\\\\n    MLSERVER_ENV_TARBALL=\"./envs/base.tar.gz\"\n\nRUN conda config --add channels conda-forge && \\\\\n    conda install conda-pack\n\n# The `[]` character range will ensure that Docker doesn't complain if the\n# files don't exist:\n# https://stackoverflow.com/a/65138098/5015573\nCOPY \\\\\n    ./environment.ym[l] \\\\\n    ./environment.yam[l] \\\\\n    ./conda.ym[l] \\\\\n    ./conda.yam[l] \\\\\n    .\nRUN mkdir $(dirname $MLSERVER_ENV_TARBALL); \\\\\n    for envFile in environment.yml environment.yaml conda.yml conda.yaml; do \\\\\n        if [[ -f $envFile ]]; then \\\\\n            conda env create \\\n                --name $MLSERVER_ENV_NAME \\\\\n                --file $envFile; \\\\\n            conda-pack --ignore-missing-files \\\n                -n $MLSERVER_ENV_NAME \\\\\n                -o $MLSERVER_ENV_TARBALL; \\\\\n        fi \\\\\n    done; \\\\\n    chmod -R 776 $(dirname $MLSERVER_ENV_TARBALL)\n\nFROM seldonio/mlserver:{version}-slim\nSHELL [\"/bin/bash\", \"-c\"]\n\n# Copy all potential sources for custom environments\nCOPY \\\\\n    --chown=1000 \\\\\n    --from=env-builder \\\\\n    /envs/base.tar.g[z] \\\\\n    ./envs/base.tar.gz\nCOPY \\\\\n    ./settings.jso[n] \\\\\n    ./model-settings.jso[n] \\\\\n    ./requirements.tx[t] \\\\\n    .\n\nUSER root\n# Install dependencies system-wide, to ensure that they are available for every\n# user\nRUN ./hack/build-env.sh . ./envs/base && \\\n    chown -R 1000:0 ./envs/base && \\\\\n    chmod -R 776 ./envs/base\nUSER 1000\n\n# Copy everything else\nCOPY . .\n\n# Override MLServer's own `CMD` to activate the embedded environment\n# (optionally activating the hot-loaded one as well).\nCMD source ./hack/activate-env.sh ./envs/base.tar.gz ./envs/base && \\\\\n    mlserver start $MLSERVER_MODELS_DIR\n\"\"\"\n\nDockerignoreName = \".dockerignore\"\nDockerignore = \"\"\"\n# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n*.pyc\n*.pyo\n*.pyd\nbin\n\n# Mac file system\n**/.DS_Store\n\n# Python dev\n__pycache__\n.Python\nenv\npip-log.txt\npip-delete-this-directory.txt\n.mypy_cache\neggs/\n.eggs/\n*.egg-info/\n./pytest_cache\n.tox\nbuild/\ndist/\n\n# Notebook Checkpoints\n.ipynb_checkpoints\n\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*,cover\n*.log\n.git\n\"\"\"\n", "path": "mlserver/cli/constants.py"}], "after_files": [{"content": "#!/usr/bin/env python\n\"\"\"\nThis script will read the `settings.json` and `model-settings.json` on a given\nfolder and will export them as environment variables.\n\nThis is used when building custom Docker images, which may have a default set\nof settings that we want to source always (e.g. the default runtime to use).\n\"\"\"\n\nimport click\nimport json\nfrom json import JSONDecodeError\nimport os\n\nfrom typing import List, Tuple, Type\nfrom pydantic import BaseSettings\n\nfrom mlserver.settings import Settings, ModelSettings, ModelParameters\nfrom mlserver.cli.serve import DEFAULT_SETTINGS_FILENAME\nfrom mlserver.repository import DEFAULT_MODEL_SETTINGS_FILENAME\n\n\ndef load_default_settings(folder: str) -> List[Tuple[Type[BaseSettings], dict]]:\n    default_settings = []\n\n    settings_path = os.path.join(folder, DEFAULT_SETTINGS_FILENAME)\n    if os.path.isfile(settings_path):\n        default_settings.append((Settings, _read_json_file(settings_path)))\n\n    model_parameters = None\n    model_settings_path = os.path.join(folder, DEFAULT_MODEL_SETTINGS_FILENAME)\n    if os.path.isfile(model_settings_path):\n        raw_defaults = _read_json_file(model_settings_path)\n        model_parameters = raw_defaults.pop(\"parameters\", None)\n        default_settings.append((ModelSettings, raw_defaults))\n\n    if model_parameters:\n        default_settings.append((ModelParameters, model_parameters))\n\n    return default_settings\n\n\ndef _read_json_file(file_path: str) -> dict:\n    with open(file_path, \"r\") as file:\n        return json.load(file)\n\n\ndef get_default_env(default_settings: List[Tuple[Type[BaseSettings], dict]]) -> dict:\n    env = {}\n    for settings_class, raw_defaults in default_settings:\n        env.update(_convert_to_env(settings_class, raw_defaults))\n\n    return env\n\n\ndef _convert_to_env(settings_class: Type[BaseSettings], raw_defaults: dict) -> dict:\n    env = {}\n\n    env_prefix = _get_env_prefix(settings_class)\n    for field_name, field_value in raw_defaults.items():\n        env_var_name = env_prefix + field_name.upper()\n        env[env_var_name] = str(field_value)\n\n    return env\n\n\ndef _get_env_prefix(settings_class: Type[BaseSettings]) -> str:\n    if not hasattr(settings_class, \"Config\"):\n        return \"\"\n\n    config = settings_class.Config\n    return getattr(config, \"env_prefix\", \"\")\n\n\ndef save_default_env(env: dict, output: str):\n    with open(output, \"w\") as file:\n        for name, value in env.items():\n            file.write(_parse_dict_values(name, value))\n\n\ndef _parse_dict_values(name: str, value: str) -> str:\n    try:\n        value = value.replace(\"'\", '\"')\n        json.loads(value)\n        return f\"{name}='{value}'\\n\"\n    except JSONDecodeError:\n        # If not JSON, then assume it's a plain string\n        return f'{name}=\"{value}\"\\n'\n\n\n@click.command()\n@click.argument(\"folder\", nargs=1)\n@click.argument(\"output\", nargs=1)\ndef main(folder: str, output: str):\n    default_settings = load_default_settings(folder)\n    default_env = get_default_env(default_settings)\n    save_default_env(default_env, output)\n\n\nif __name__ == \"__main__\":\n    main()\n", "path": "hack/generate_dotenv.py"}, {"content": "DockerfileName = \"Dockerfile\"\nDockerfileTemplate = \"\"\"\nFROM continuumio/miniconda3:4.12.0 AS env-builder\nSHELL [\"/bin/bash\", \"-c\"]\n\nARG MLSERVER_ENV_NAME=\"mlserver-custom-env\" \\\\\n    MLSERVER_ENV_TARBALL=\"./envs/base.tar.gz\"\n\nRUN conda config --add channels conda-forge && \\\\\n    conda install conda-pack\n\n# The `[]` character range will ensure that Docker doesn't complain if the\n# files don't exist:\n# https://stackoverflow.com/a/65138098/5015573\nCOPY \\\\\n    ./environment.ym[l] \\\\\n    ./environment.yam[l] \\\\\n    ./conda.ym[l] \\\\\n    ./conda.yam[l] \\\\\n    .\nRUN mkdir $(dirname $MLSERVER_ENV_TARBALL); \\\\\n    for envFile in environment.yml environment.yaml conda.yml conda.yaml; do \\\\\n        if [[ -f $envFile ]]; then \\\\\n            conda env create \\\n                --name $MLSERVER_ENV_NAME \\\\\n                --file $envFile; \\\\\n            conda-pack --ignore-missing-files \\\n                -n $MLSERVER_ENV_NAME \\\\\n                -o $MLSERVER_ENV_TARBALL; \\\\\n        fi \\\\\n    done; \\\\\n    chmod -R 776 $(dirname $MLSERVER_ENV_TARBALL)\n\nFROM seldonio/mlserver:{version}-slim\nSHELL [\"/bin/bash\", \"-c\"]\n\n# Copy all potential sources for custom environments\nCOPY \\\\\n    --chown=1000 \\\\\n    --from=env-builder \\\\\n    /envs/base.tar.g[z] \\\\\n    ./envs/base.tar.gz\nCOPY \\\\\n    ./settings.jso[n] \\\\\n    ./model-settings.jso[n] \\\\\n    ./requirements.tx[t] \\\\\n    .\n\nUSER root\n# Install dependencies system-wide, to ensure that they are available for every\n# user and give permissions to (future) environment folder.\nRUN ./hack/build-env.sh . && \\\\\n    mkdir -p ./envs/base && \\\\\n    chown -R 1000:0 ./envs/base && \\\\\n    chmod -R 776 ./envs/base\nUSER 1000\n\n# Copy everything else\nCOPY . .\n\n# Override MLServer's own `CMD` to activate the embedded environment\n# (optionally activating the hot-loaded one as well).\nCMD source ./hack/activate-env.sh ./envs/base.tar.gz && \\\\\n    mlserver start $MLSERVER_MODELS_DIR\n\"\"\"\n\nDockerignoreName = \".dockerignore\"\nDockerignore = \"\"\"\n# Binaries for programs and plugins\n*.exe\n*.exe~\n*.dll\n*.so\n*.dylib\n*.pyc\n*.pyo\n*.pyd\nbin\n\n# Mac file system\n**/.DS_Store\n\n# Python dev\n__pycache__\n.Python\nenv\npip-log.txt\npip-delete-this-directory.txt\n.mypy_cache\neggs/\n.eggs/\n*.egg-info/\n./pytest_cache\n.tox\nbuild/\ndist/\n\n# Notebook Checkpoints\n.ipynb_checkpoints\n\n.coverage\n.coverage.*\n.cache\nnosetests.xml\ncoverage.xml\n*,cover\n*.log\n.git\n\"\"\"\n", "path": "mlserver/cli/constants.py"}]}