如何在Dockerfile中为依赖于/dev/tty*文件的包运行dpkg

如何在Dockerfile中为依赖于/dev/tty*文件的包运行dpkg,docker,docker-compose,Docker,Docker Compose,我必须在Rails容器中安装一个打印机,这样我的Rails应用程序就可以将作业打印到80毫米纸卷打印机上 我使用的是rails 2.6:buster图像 问题是:当安装这个包时,它抛出一个错误,/dev/tty[something]不存在 当我在容器中设置卷/dev:/dev时,它是固定的,我可以将它安装在docker compose run rails_app dpkg-I…/this-package.deb上 但我在想: 在容器启动后安装此软件包是否明智?如果是这种情况,我应该将其添加到en

我必须在Rails容器中安装一个打印机,这样我的Rails应用程序就可以将作业打印到80毫米纸卷打印机上

我使用的是rails 2.6:buster图像

问题是:当安装这个包时,它抛出一个错误,/dev/tty[something]不存在

当我在容器中设置卷/dev:/dev时,它是固定的,我可以将它安装在docker compose run rails_app dpkg-I…/this-package.deb上

但我在想:

  • 在容器启动后安装此软件包是否明智?如果是这种情况,我应该将其添加到entrypoint.sh中吗

  • 或者我应该在Dockerfile中声明一个将我的/dev/文件夹绑定到容器的/dev/的卷,然后使用运行dpkg-I…/my-package.deb吗

  • 这是我的
    Dockerfile

    FROM ruby:2.6
    
    RUN mkdir -p /app/ncommerce_api
    WORKDIR /app/ncommerce_api
    
    COPY Gemfile Gemfile.lock ./
    RUN gem install bundler
    RUN bundle install --binstubs
    
    RUN apt-get update -qq
    RUN apt-get install -y redis-tools cups
    
    COPY . .
    
    COPY docker-entrypoint.sh /usr/bin/
    
    RUN chmod +x /usr/bin/docker-entrypoint.sh
    
    ENTRYPOINT ["docker-entrypoint.sh"]
    
    CMD ["rails", "server", "-b", "0.0.0.0"]
    
    和我的
    docker compose.yml

    version: '3'
    
    services:
      mysql_instance:
        image: 'mysql:5.7'
        environment: 
          MYSQL_ROOT_PASSWORD: "${DB_ROOT_PASSWORD}"
        networks:
          - backend
        volumes:
          - 'db_vol:/var/lib/mysql'
    
      redis_instance:
        image: 'redis:buster'
        networks:
          - backend
        volumes:
          - 'redis_vol:/data'
    
      rails_app:
        depends_on:
          - 'mysql_instance'
          - 'redis_instance'
        build: .
        env_file:
          - '.env'
          - '.env.docker'
        ports:
          - '3000:3000'
          - '3009:631'
        networks:
          - backend
          - frontend
        volumes:
          - 'app_vol:/app/ncommerce_api'
          - '/dev:/dev'
    
    
    networks:
      backend:
      frontend:
    
    volumes:
      db_vol: {}
      redis_vol: {}
      app_vol: {}