Dockerfile - /bin/sh: 1: /root/.cache/dfinity/versions/0.19.0/moc: not found

Hey everyone,

I’m encountering an issue while building my Docker image, and I’d appreciate some help troubleshooting it.

Problem: During the Docker build process, I’m consistently getting an error stating “moc not found,” which halts the build process. Here’s the specific error message:

bashCopy code

/bin/sh: 1: /root/.cache/dfinity/versions/0.19.0/moc: not found
ERROR: moc not found. Please check your DFINITY SDK installation.

Dockerfile:45
--------------------
  43 |     
  44 |     # Use ic-mops to install Motoko package dependencies
  45 | >>> RUN mops install
  46 |     
  47 |     # Expose any ports your app needs (adjust as necessary)
--------------------
ERROR: failed to solve: process "/bin/sh -c mops install" did not complete successfully: exit code: 1

Context: I’m using a Dockerfile to set up my development environment. In the Dockerfile, I’ve included commands to install the DFINITY Canister SDK (dfx) and other dependencies required for my project. When i try running the global instalation for mops (motoko package manager), it outputs an error regarding the location of the compiler (moc).

Troubleshooting Steps Taken:

  • Verified that the DFINITY SDK installation completes without errors.
  • Checked the expected installation path for moc after dfx installation.
  • Attempted to directly check for moc using the find command in the Dockerfile.
  • Ensured that the Dockerfile environment is correctly configured to locate moc.

Request for Assistance: Despite these steps, I’m still encountering the “moc not found” error during the Docker build. I’d appreciate any insights or suggestions on how to resolve this issue.

Dockerfile Snippet: Here’s the relevant part of my Dockerfile for reference:

DockerfileCopy code

# Start with the official Node.js base image to get the latest npm along with Node.js
FROM node:latest

# Install system dependencies required for the DFINITY Canister SDK and general development
RUN apt-get update && apt-get install -y \
    curl \
    git \
    build-essential \
    libssl-dev \
    pkg-config \
    cmake \
    && rm -rf /var/lib/apt/lists/*

# Set the environment variable to non-interactively agree to the installation prompts
ENV DFXVM_INIT_YES=true

# Install the DFINITY Canister SDK
RUN curl -fsSL https://internetcomputer.org/install.sh | sh \
    && echo "Install script exit code: $?"

# Define the DFX_PATH environment variable and add it to PATH
ENV DFX_PATH="/root/.local/share/dfx/bin"
ENV PATH="$DFX_PATH:$PATH"

# Verify dfx installation and check if moc is installed correctly
RUN curl -fsSL https://internetcomputer.org/install.sh | sh \
    && echo "Install script exit code: $?"

# Attempt to load the environment and check for `moc`
RUN bash -lc "dfx --version && find / -name moc 2>/dev/null"

# Install ic-mops globally
RUN npm install -g ic-mops

# Set the working directory in the Docker container
WORKDIR /app

# Copy your project files into the working directory
COPY . .

# Install project dependencies including Node.js packages
RUN npm install

# Use ic-mops to install Motoko package dependencies
RUN mops install

# Expose any ports your app needs (adjust as necessary)
EXPOSE 8000

# Commands to run your app
# Assuming dfx, generate, copy commands and deploy commands are needed
RUN dfx start --background --clean \
    && dfx generate \
    && cp src/declarations/users/* .dfx/local/canisters/users/ \
    && cp src/declarations/user_index/* .dfx/local/canisters/user_index/ \
    && cp src/declarations/token/* .dfx/local/canisters/token/ \
    && cp src/declarations/token_index/* .dfx/local/canisters/token_index/ \
    && cp src/declarations/agent/* .dfx/local/canisters/agent/ \
    && cp src/declarations/marketplace/* .dfx/local/canisters/marketplace/ \
    && cp src/declarations/http_service/* .dfx/local/canisters/http_service/ \
    && dfx deploy

# CMD to keep the container running

Conclusion: If anyone has encountered a similar issue or has any suggestions on how to resolve it, I’d greatly appreciate your input. Thank you in advance for your help!

@ZenVoich might have some insight. Looks like mops can’t find moc

ok… do you have anything i could do? thanks!

Im not sure, thats why i pinged the creator

I think MOPS is setup to get the cached dfx binaries, so you might need to run something with dfx before MOPS install? I think there is something weird where you install it, but until you run dfx first, the binaries are not in the right place?

dfx lazily populates the cache when required, e.g. when running dfx start. To force cache installation you can use dfx cache install

1 Like

Adding this actually solved it, thanks :slight_smile:

1 Like