I'm trying to run one of my Docker work projects from MacBook Air M1 and I'm getting the following error while executing docker-compose up
. Apparently it can't find the python installation, even though I can do both python --version
and python3 --version
from terminal. I'm relatively new to Docker but I tried to troubleshoot every possible thing to solve this error
#8 91.79 info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
#8 91.79 error /app/node_modules/node-sass: Command failed.
#8 91.79 Exit code: 1
#8 91.79 Command: node scripts/build.js
#8 91.79 Arguments:
#8 91.79 Directory: /app/node_modules/node-sass
#8 91.79 Output:
#8 91.79 Building: /usr/local/bin/node /app/node_modules/node-gyp/bin/node-gyp.js rebuild --verbose --libsass_ext= --libsass_cflags= --libsass_ldflags= --libsass_library=
#8 91.79 gyp info it worked if it ends with ok
#8 91.79 gyp verb cli [
#8 91.79 gyp verb cli '/usr/local/bin/node',
#8 91.79 gyp verb cli '/app/node_modules/node-gyp/bin/node-gyp.js',
#8 91.79 gyp verb cli 'rebuild',
#8 91.79 gyp verb cli '--verbose',
#8 91.79 gyp verb cli '--libsass_ext=',
#8 91.79 gyp verb cli '--libsass_cflags=',
#8 91.79 gyp verb cli '--libsass_ldflags=',
#8 91.79 gyp verb cli '--libsass_library='
#8 91.79 gyp verb cli ]
#8 91.79 gyp info using [email protected]
#8 91.79 gyp info using [email protected] | linux | arm64
#8 91.79 gyp verb command rebuild []
#8 91.79 gyp verb command clean []
#8 91.79 gyp verb clean removing "build" directory
#8 91.79 gyp verb command configure []
#8 91.79 gyp verb find Python Python is not set from command line or npm configuration
#8 91.79 gyp verb find Python Python is not set from environment variable PYTHON
#8 91.79 gyp verb find Python checking if "python3" can be used
#8 91.79 gyp verb find Python - executing "python3" to get executable path
#8 91.79 gyp verb find Python - "python3" is not in PATH or produced an error
#8 91.79 gyp verb find Python checking if "python" can be used
#8 91.79 gyp verb find Python - executing "python" to get executable path
#8 91.79 gyp verb find Python - "python" is not in PATH or produced an error
#8 91.79 gyp verb find Python checking if "python2" can be used
#8 91.79 gyp verb find Python - executing "python2" to get executable path
#8 91.79 gyp verb find Python - "python2" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python
#8 91.79 gyp ERR! find Python Python is not set from command line or npm configuration
#8 91.79 gyp ERR! find Python Python is not set from environment variable PYTHON
#8 91.79 gyp ERR! find Python checking if "python3" can be used
#8 91.79 gyp ERR! find Python - "python3" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python checking if "python" can be used
#8 91.79 gyp ERR! find Python - "python" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python checking if "python2" can be used
#8 91.79 gyp ERR! find Python - "python2" is not in PATH or produced an error
#8 91.79 gyp ERR! find Python
#8 91.79 gyp ERR! find Python **********************************************************
#8 91.79 gyp ERR! find Python You need to install the latest version of Python.
#8 91.79 gyp ERR! find Python Node-gyp should be able to find and use Python. If not,
#8 91.79 gyp ERR! find Python you can try one of the following options:
#8 91.79 gyp ERR! find Python - Use the switch --python="/path/to/pythonexecutable"
#8 91.79 gyp ERR! find Python (accepted by both node-gyp and npm)
#8 91.79 gyp ERR! find Python - Set the environment variable PYTHON
#8 91.79 gyp ERR! find Python - Set the npm configuration variable python:
#8 91.79 gyp ERR! find Python npm config set python "/path/to/pythonexecutable"
#8 91.79 gyp ERR! find Python For more information consult the documentation at:
#8 91.79 gyp ERR! find Python https://github.com/nodejs/node-gyp#installation
#8 91.79 gyp ERR! find Python **********************************************************
#8 91.79 gyp ERR! find Python
#8 91.79 gyp ERR! configure error
#8 91.79 gyp ERR! stack Error: Could not find any Python installation to use
#8 91.79 gyp ERR! stack at PythonFinder.fail (/app/node_modules/node-gyp/lib/find-python.js:302:47)
#8 91.79 gyp ERR! stack at PythonFinder.runChecks (/app/node_modules/node-gyp/lib/find-python.js:136:21)
#8 91.79 gyp ERR! stack at PythonFinder.<anonymous> (/app/node_modules/node-gyp/lib/find-python.js:179:16)
#8 91.79 gyp ERR! stack at PythonFinder.execFileCallback (/app/node_modules/node-gyp/lib/find-python.js:266:16)
#8 91.79 gyp ERR! stack at exithandler (node:child_process:404:5)
#8 91.79 gyp ERR! stack at ChildProcess.errorhandler (node:child_process:416:5)
#8 91.79 gyp ERR! stack at ChildProcess.emit (node:events:390:28)
#8 91.79 gyp ERR! stack at Process.ChildProcess._handle.onexit (node:internal/child_process:288:12)
#8 91.79 gyp ERR! stack at one rrorNT (node:internal/child_process:477:16)
#8 91.79 gyp ERR! stack at processTicksAndRejections (node:internal/process/task_queues:83:21)
#8 91.79 gyp ERR! System Linux 5.10.47-linuxkit
#8 91.79 gyp ERR! command "/usr/local/bin/node" "/app/node_modules/node-gyp/bin/node-gyp.js" "rebuild" "--verbose" "--libsass_ext=" "--libsass_cflags=" "--libsass_ldflags=" "--libsass_library="
#8 91.79 gyp ERR! cwd /app/node_modules/node-sass
#8 91.79 gyp ERR! node -v v16.13.0
#8 91.79 gyp ERR! node-gyp -v v7.1.2
#8 91.79 gyp ERR! not ok
#8 91.79 Build failed with error code: 1
I tried all of the things that the error suggests - setting the path variable of the python, and trying to set NPM's config to the python's path but no luck...
I also tried downgrading node to v16, as node-sass 6.0.1 is not compatible with node v17 according to the docs
I have python 3.9.8 installed via homebrew, and running which python3
outputs /opt/homebrew/bin/python3
node -v
: v16.13.0
npm -v
: v8.1.0
echo $PATH
: /Library/Frameworks/Python.framework/Versions/3.10/bin /opt/homebrew/bin:/opt/homebrew/sbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/Apple/usr/bin
npm config list
:
prefix = "/opt/homebrew"
; "global" config from /opt/homebrew/etc/npmrc
; python = "/opt/homebrew/opt/[email protected]/libexec/bin" ; overridden by user
; "user" config from /Users/**username**/.npmrc
python = "/opt/homebrew/opt/[email protected]/libexec/bin"
CodePudding user response:
Problem:
The python is installed locally on your macbook but not inside the docker container (which is an isolated virtual os).
Solution
You need to install python in the same container where you are running the nodejs script or npm command.
Try Adding this after pulling your nodejs image in dockerFile
RUN apt-get update || : && apt-get install python -y
That is for debian or debian based linux distro ... (if you have official Node image that is based on debian so the upper line should work fine right after you pull the image run you need to install python in the same container).