gpt4 book ai didi

ruby-on-rails - 为什么我的 Docker PostgreSQL 容器不再运行?

转载 作者:行者123 更新时间:2023-12-02 17:19:33 27 4
gpt4 key购买 nike

自从我将适用于 Windows 的 Docker Desktop 从 2.1.0.5 更新到版本 2.2.0.3 以来,我的应用程序的 db 容器出现了问题。这一切在 2.1.0.5 之前都可以正常工作,但现在即使在我删除 2.2.0.3 并恢复到 2.1.0.5 之后它也无法正常工作。真希望我现在没有更新。

我得到的错误是:

could not translate host name "db" to address: Name or service not known

当我运行 docker ps 时,我可以看到 postgres 容器甚至没有运行。

我尝试过的一些事情是:
  • 将 db 添加到我的 Windows 10 主机文件中。
  • 在 docker-compose.yml
  • 中为数据库公开端口 5432

    没有任何效果。

    谁能提供任何见解来帮助我理解和解决问题?

    我的 Docker 文件:
    FROM ruby:2.5
    RUN apt-get update -qq && apt-get install -y build-essential libpq-dev nodejs
    RUN mkdir /my-app
    WORKDIR /my-app
    RUN echo 'gem: --no-document' >> ~/.gemrc
    COPY . /my-app
    EXPOSE 3000

    我的 docker-compose.yml:
    version: '3'
    services:
    db:
    image: postgres
    volumes:
    - postgres:/var/lib/postgresql/data/
    redis:
    image: 'redis:4-alpine'
    environment:
    - REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
    ports:
    - '6379:6379'
    command: redis-server --requirepass somepassword
    volumes:
    - redis:/data/
    myapp:
    build: ./myapp/
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    environment:
    - RAILS_ENV=development
    - PORT=3000
    - REDIS_URL=redis://:somepassword@redis:6379/0
    ports:
    - '3000:3000'
    working_dir: /myapp/
    volumes:
    - ./myapp:/myapp:cached
    - myapp_gems:/usr/local/bundle/
    - /myapp/tmp/
    depends_on:
    - db
    - redis
    myapp_sidekiq:
    build: ./myapp/
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec sidekiq -C config/sidekiq.yml"
    environment:
    - RAILS_ENV=development
    - PORT=3000
    - REDIS_URL=redis://:somepassword@redis:6379/0
    working_dir: /myapp/
    volumes:
    - ./myapp:/myapp:cached
    - myapp_gems:/usr/local/bundle/
    - /myapp/tmp/
    depends_on:
    - db
    - redis

    volumes:
    postgres:
    external: true
    redis:
    external: true
    myapp_gems:

    我的数据库.yml:
    # Configure Using Gemfile
    # gem 'pg'
    #
    default: &default
    adapter: postgresql
    encoding: unicode
    # For details on connection pooling, see rails configuration guide
    # http://guides.rubyonrails.org/configuring.html#database-pooling
    pool: 5
    host: db
    username: postgres
    password:

    编辑:作为对@Brits 的回应,这里是 docker-compose up db 的输出:
    Attaching to dev_db_1
    db_1 | Error: Database is uninitialized and superuser password is not specified.
    db_1 | You must specify POSTGRES_PASSWORD to a non-empty value for the
    db_1 | superuser. For example, "-e POSTGRES_PASSWORD=password" on "docker run".
    db_1 |
    db_1 | You may also use "POSTGRES_HOST_AUTH_METHOD=trust" to allow all
    db_1 | connections without a password. This is *not* recommended.
    db_1 |
    db_1 | See PostgreSQL documentation about "trust":
    db_1 | https://www.postgresql.org/docs/current/auth-trust.html
    dev_db_1 exited with code 1

    这很有趣,因为我之前没有指定 POSTGRES_PASSWORD,它运行良好。

    感谢@Brits,我能够找到问题所在。这是由于最近对 docker-library/postgres 进行了不为人知的更改,该更改需要默认指定 POSTGRES_PASSWORD,如 Github issue 中所指出的。

    最佳答案

    感谢@Brits,我能够找到问题所在。

    这是由于最近对 docker-library/postgres 进行了不为人知的更改,该更改需要默认指定 POSTGRES_PASSWORD,如 Github issue 中所指出的。

    以下是解决方法:

    将 POSTGRES_PASSWORD 作为环境变量添加到 docker-compose.yml(postgres 容器以及 app 容器):

    version: '3'
    services:
    db:
    image: postgres
    environment:
    - POSTGRES_PASSWORD=somepassword
    volumes:
    - postgres:/var/lib/postgresql/data/
    redis:
    image: 'redis:4-alpine'
    environment:
    - REDIS_DISABLE_COMMANDS=FLUSHDB,FLUSHALL
    ports:
    - '6379:6379'
    command: redis-server --requirepass somepassword
    volumes:
    - redis:/data/
    myapp:
    build: ./myapp/
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec rails s -p 3000 -b '0.0.0.0'"
    environment:
    - RAILS_ENV=development
    - PORT=3000
    - REDIS_URL=redis://:somepassword@redis:6379/0
    - POSTGRES_PASSWORD=somepassword
    ports:
    - '3000:3000'
    working_dir: /myapp/
    volumes:
    - ./myapp:/myapp:cached
    - myapp_gems:/usr/local/bundle/
    - /myapp/tmp/
    depends_on:
    - db
    - redis
    myapp_sidekiq:
    build: ./myapp/
    command: bash -c "rm -f tmp/pids/server.pid && bundle exec sidekiq -C config/sidekiq.yml"
    environment:
    - RAILS_ENV=development
    - PORT=3000
    - REDIS_URL=redis://:somepassword@redis:6379/0
    working_dir: /myapp/
    volumes:
    - ./myapp:/myapp:cached
    - myapp_gems:/usr/local/bundle/
    - /myapp/tmp/
    depends_on:
    - db
    - redis

    volumes:
    postgres:
    external: true
    redis:
    external: true
    myapp_gems:

    然后在应用程序的 database.yml 中为 POSTGRES_PASSWORD 添加 ENV 变量:
    # Configure Using Gemfile
    # gem 'pg'
    #
    default: &default
    adapter: postgresql
    encoding: unicode
    # For details on connection pooling, see rails configuration guide
    # http://guides.rubyonrails.org/configuring.html#database-pooling
    pool: 5
    host: db
    username: postgres
    password: <%= ENV['POSTGRES_PASSWORD'] %>

    关于ruby-on-rails - 为什么我的 Docker PostgreSQL 容器不再运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60368999/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com