1

我在使用Ruby on Rail設置和運行本地系統上的docker實例時遇到了問題。請參閱我的搬運工配置文件: -服務器是否在主機「localhost」(:: 1)上運行,並接受端口5432上的TCP/IP連接?

Dockerfile

FROM ruby:2.3.1 

RUN useradd -ms /bin/bash web 
RUN apt-get update -qq && apt-get install -y build-essential 
RUN apt-get -y install nginx 
RUN apt-get -y install sudo 
# for postgres 
RUN apt-get install -y libpq-dev 

# for nokogiri 
RUN apt-get install -y libxml2-dev libxslt1-dev 

# for a JS runtime 
RUN apt-get install -y nodejs 
RUN apt-get update 

# For docker cache 
WORKDIR /tmp 
ADD ./Gemfile Gemfile 
ADD ./Gemfile.lock Gemfile.lock 
ENV BUNDLE_PATH /bundle 
RUN gem install bundler --no-rdoc --no-ri 
RUN bundle install 
# END 
ENV APP_HOME /home/web/cluetap_app 
RUN mkdir -p $APP_HOME 
WORKDIR $APP_HOME 
ADD . $APP_HOME 
RUN chown -R web:web $APP_HOME 
ADD ./nginx/nginx.conf /etc/nginx/ 
RUN unlink /etc/nginx/sites-enabled/default 
ADD ./nginx/cluetap_nginx.conf /etc/nginx/sites-available/ 
RUN ln -s /etc/nginx/sites-available/cluetap_nginx.conf /etc/nginx/sites-enabled/cluetap_nginx.conf 
RUN usermod -a -G sudo web 

泊塢窗,compose.yml

version: '2' 
services: 
    postgres: 
    image: 'postgres:9.6' 
    environment: 
     - PGDATA=/var/lib/postgresql/data/pgdata 
     - POSTGRES_PASSWORD= 
     - POSTGRES_USER=postgres 
     - POSTGRES_HOST=cluetapapi_postgres_1 
    networks: 
     - default 
     - service-proxy 
    ports: 
     - '5432:5432' 
    volumes: 
     - 'postgres:/var/lib/postgresql/data' 
    labels: 
     description: "Postgresql Database" 
     service: "postgresql" 
    web: 
    container_name: cluetap_api 
    build: . 
    command: bash -c "thin start -C config/thin/development.yml && nginx -g 'daemon off;'" 
    volumes: 
     - .:/home/web/cluetap_app 
    ports: 
     - "80:80" 
    depends_on: 
     - 'postgres' 
networks: 
    service-proxy: 
volumes: 
    postgres: 

當我運行泊塢窗 - 撰寫建泊塢窗,構成了-d這兩個命令它成功運行,但是當我從url中擊中它時,它會導致內部服務器錯誤並且錯誤是

Unexpected error while processing request: could not connect to server: Connection refused 
    Is the server running on host "localhost" (127.0.0.1) and accepting 
    TCP/IP connections on port 5432? 
could not connect to server: Cannot assign requested address 
    Is the server running on host "localhost" (::1) and accepting 
    TCP/IP connections on port 5432? 

我已經應用了一些解決方案,但它不適用於我,請指導我我是碼頭工人和AWS的新手。

+0

碼頭日誌cluetap_api的輸出是什麼?我會建議給你的postgres一個容器名如:my-postgres。您可以使用my-postgres:5432從您的api-container連接到您的postgres,因爲它們部署在同一個網絡中。你甚至不需要映射端口。 – lvthillo

+0

如果要映射端口,則可以使用server-ip:5432從您的api-container連接。比你的容器不需要在同一個網絡內。 – lvthillo

回答

4

問題是您正嘗試連接到DB容器內的本地主機。將012g用於postgres映射5432的端口映射映射到主機的本地主機。

現在您的web容器代碼正在容器中運行。其本地主機上沒有任何東西:5432。

所以,你需要更改配置連接詳細信息連接到postgres:5432,這是因爲你被點名的Postgres的DB服務爲postgres

變化是,它應該工作。

+0

我已經連接到數據庫成功,但我不知道爲什麼不創建數據庫時我已跑'泊塢窗,撰寫build'不是它給錯誤'意外的錯誤在處理請求:FATAL:數據庫「cluetap_development」不exist' –

+0

Postgres映像將根據您在環境變量中指定的名稱初始化新的數據庫。 POSTGRES_DB。在你的docker-compose中設置這個環境變量爲cluetap_development,它應該有DB –

+0

你好我已經把數據庫名稱加入到yml文件'db:image:postgres環境:POSTGRES_PASSWORD:POSTGRES_USER:postgres POSTGRES_DATABASE:cluetap_development' –

2

默認情況下,postgres圖像已經暴露給5432,所以你可以在你的yml中刪除那部分。

然後,如果你想檢查是否Web服務可以連接到您的Postgres服務,您可以運行此docker-compose exec web curl postgres:5432那麼它應該返回:

捲曲:(52)空從服務器

如果回覆它不能連接,則回覆:

捲曲:(6)無法解析主機:Postgres的捲曲:(7)無法連接到Postgres的端口5432:連接被拒絕

UPDATE:

我現在知道的問題。這是因爲您嘗試在本地主機上連接,您應該連接到postgres服務。

+0

我已經將端口部分從yml文件中刪除,然後運行docker命令,但它仍然存在相同的問題,並且在運行這個'docker-compose exec web curl postgres:5432'後,它返回** curl:(52)從服務器**返回空的消息,我應該怎麼做來解決這個問題。 –

+0

我有一個**更新**我的回答 –

+0

我已經連接到數據庫成功,但我不知道爲什麼數據庫未創建時,我已經運行了'docker-compose build'而不是它給出的錯誤'處理請求時出現意外錯誤:FATAL:數據庫 「cluetap_development」 不exist' –

相關問題