Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Docker,每运行一次服务就拒绝连接一次_Ruby On Rails_Port_Docker Compose_Microservices - Fatal编程技术网

Ruby on rails Docker,每运行一次服务就拒绝连接一次

Ruby on rails Docker,每运行一次服务就拒绝连接一次,ruby-on-rails,port,docker-compose,microservices,Ruby On Rails,Port,Docker Compose,Microservices,我在本地安装的docker无法访问其他端口 这是我的docker compose.yml文件: db: image: library/mysql:5.6 environment: MYSQL_ALLOW_EMPTY_PASSWORD: "yes" expose: - "3306" ports: - "3306:3306" mailcatcher: image: yappabe/mailcatcher ports: - "1025:1025

我在本地安装的docker无法访问其他端口

这是我的
docker compose.yml
文件:

db:
  image: library/mysql:5.6
  environment:
    MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
  expose:
    - "3306"
  ports:
    - "3306:3306"

mailcatcher:
  image: yappabe/mailcatcher
  ports:
    - "1025:1025"
    - "1080:1080"

rails-app:
  build: .
  dockerfile: "Dockerfile"
  environment:
    RAILS_ENV: development
  links:
    - mailcatcher
    - db
  command: bundle exec rails server -p 3005 -b '0.0.0.0'
  volumes:
    - ".:/home/app"
  volumes_from:
    - bundle
  expose:
    - "3005"
  ports:
    - "3005:3005"
这是mailcatcher的配置
config/environments/development.rb

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: "localhost", port: 1025 }
以下是我运行rails应用程序的方式:

docker-compose run --service-ports rails-app
这是我在运行docker ps时看到的:

> docker ps
CONTAINER ID        IMAGE                  COMMAND                  CREATED             STATUS              PORTS                                            NAMES
1fa8ac2ad8fd        pmt_rails-app          "bundle exec rails se"   5 seconds ago       Up 3 seconds        0.0.0.0:3005->3005/tcp                           pmt_rails-app_run_1
4f65bb2fc9ac        yappabe/mailcatcher    "/run.sh"                About an hour ago   Up About an hour    0.0.0.0:1025->1025/tcp, 0.0.0.0:1080->1080/tcp   pmt_mailcatcher_1
cfb364ee569f        library/mysql:5.6      "docker-entrypoint.sh"   About an hour ago   Up About an hour    0.0.0.0:3306->3306/tcp                           pmt_db_1
这是rails应用程序尝试发送电子邮件时得到的结果:

Errno::ECONNREFUSED: Connection refused - connect(2) for "localhost" port 1025
from /usr/local/lib/ruby/2.3.0/net/smtp.rb:542:in `initialize'
当我尝试连接另一个运行在另一个端口上的
rails服务器时,我会遇到同样的错误


我正在Mac OSX中使用Docker beta。Docker实例上的本地主机将引用该实例公开的端口。如果要从同一
docker compose.yml
文件中的另一个实例访问端口,请使用,其形式为
服务名称:别名
。(如果排除
别名
,则它与
源名称
相同)

因此,在上面的示例中,mailcatcher
config/environments/development.rb的配置应该是:

config.action_mailer.delivery_method = :smtp
config.action_mailer.smtp_settings = { address: "mailcatcher", port: 1025 }

你救了我的命!很高兴我能帮上忙:)2条生命,还有计数!谢谢你的回答!